Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(486)

Side by Side Diff: ios/web/web_state/ui/crw_web_controller_unittest.mm

Issue 2933363002: [ObjC ARC] Converts ios/web:ios_web_web_state_ui_unittests to ARC. (Closed)
Patch Set: Review nits. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 #include "base/ios/ios_util.h" 11 #include "base/ios/ios_util.h"
12 #import "base/ios/weak_nsobject.h" 12 #include "base/mac/foundation_util.h"
13 #import "base/mac/scoped_nsobject.h"
14 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
15 #import "base/test/ios/wait_util.h" 14 #import "base/test/ios/wait_util.h"
16 #import "ios/testing/ocmock_complex_type_helper.h" 15 #import "ios/testing/ocmock_complex_type_helper.h"
17 #import "ios/web/navigation/crw_session_controller.h" 16 #import "ios/web/navigation/crw_session_controller.h"
18 #import "ios/web/navigation/navigation_item_impl.h" 17 #import "ios/web/navigation/navigation_item_impl.h"
19 #import "ios/web/navigation/navigation_manager_impl.h" 18 #import "ios/web/navigation/navigation_manager_impl.h"
20 #include "ios/web/public/referrer.h" 19 #include "ios/web/public/referrer.h"
21 #import "ios/web/public/test/fakes/test_native_content.h" 20 #import "ios/web/public/test/fakes/test_native_content.h"
22 #import "ios/web/public/test/fakes/test_native_content_provider.h" 21 #import "ios/web/public/test/fakes/test_native_content_provider.h"
23 #import "ios/web/public/test/fakes/test_web_client.h" 22 #import "ios/web/public/test/fakes/test_web_client.h"
(...skipping 18 matching lines...) Expand all
42 #include "net/ssl/ssl_info.h" 41 #include "net/ssl/ssl_info.h"
43 #include "net/test/cert_test_util.h" 42 #include "net/test/cert_test_util.h"
44 #include "net/test/test_data_directory.h" 43 #include "net/test/test_data_directory.h"
45 #include "testing/gtest/include/gtest/gtest.h" 44 #include "testing/gtest/include/gtest/gtest.h"
46 #import "testing/gtest_mac.h" 45 #import "testing/gtest_mac.h"
47 #include "third_party/ocmock/OCMock/OCMock.h" 46 #include "third_party/ocmock/OCMock/OCMock.h"
48 #include "third_party/ocmock/gtest_support.h" 47 #include "third_party/ocmock/gtest_support.h"
49 #include "third_party/ocmock/ocmock_extensions.h" 48 #include "third_party/ocmock/ocmock_extensions.h"
50 #import "ui/base/test/ios/ui_view_test_utils.h" 49 #import "ui/base/test/ios/ui_view_test_utils.h"
51 50
51 #if !defined(__has_feature) || !__has_feature(objc_arc)
52 #error "This file requires ARC support."
53 #endif
54
52 using web::NavigationManagerImpl; 55 using web::NavigationManagerImpl;
53 56
54 @interface CRWWebController (PrivateAPI) 57 @interface CRWWebController (PrivateAPI)
55 @property(nonatomic, readwrite) web::PageDisplayState pageDisplayState; 58 @property(nonatomic, readwrite) web::PageDisplayState pageDisplayState;
56 @end 59 @end
57 60
58 @interface CountingObserver : NSObject<CRWWebControllerObserver> 61 @interface CountingObserver : NSObject<CRWWebControllerObserver>
59 62
60 @property(nonatomic, readonly) int pageLoadedCount; 63 @property(nonatomic, readonly) int pageLoadedCount;
61 @end 64 @end
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 base::test::ios::WaitUntilCondition(^bool() { 115 base::test::ios::WaitUntilCondition(^bool() {
113 return webController.pageDisplayState.zoom_state() == zoom_state; 116 return webController.pageDisplayState.zoom_state() == zoom_state;
114 }); 117 });
115 } 118 }
116 119
117 // Test fixture for testing CRWWebController. Stubs out web view. 120 // Test fixture for testing CRWWebController. Stubs out web view.
118 class CRWWebControllerTest : public web::WebTestWithWebController { 121 class CRWWebControllerTest : public web::WebTestWithWebController {
119 protected: 122 protected:
120 void SetUp() override { 123 void SetUp() override {
121 web::WebTestWithWebController::SetUp(); 124 web::WebTestWithWebController::SetUp();
122 mock_web_view_.reset([CreateMockWebView() retain]); 125 mock_web_view_ = CreateMockWebView();
123 scroll_view_.reset([[UIScrollView alloc] init]); 126 scroll_view_ = [[UIScrollView alloc] init];
124 [[[mock_web_view_ stub] andReturn:scroll_view_.get()] scrollView]; 127 [[[mock_web_view_ stub] andReturn:scroll_view_] scrollView];
125 128
126 base::scoped_nsobject<TestWebViewContentView> webViewContentView( 129 TestWebViewContentView* web_view_content_view =
127 [[TestWebViewContentView alloc] initWithMockWebView:mock_web_view_ 130 [[TestWebViewContentView alloc] initWithMockWebView:mock_web_view_
128 scrollView:scroll_view_]); 131 scrollView:scroll_view_];
129 [web_controller() injectWebViewContentView:webViewContentView]; 132 [web_controller() injectWebViewContentView:web_view_content_view];
130 } 133 }
131 134
132 void TearDown() override { 135 void TearDown() override {
133 EXPECT_OCMOCK_VERIFY(mock_web_view_); 136 EXPECT_OCMOCK_VERIFY(mock_web_view_);
134 [web_controller() resetInjectedWebViewContentView]; 137 [web_controller() resetInjectedWebViewContentView];
135 web::WebTestWithWebController::TearDown(); 138 web::WebTestWithWebController::TearDown();
136 } 139 }
137 140
138 // The value for web view OCMock objects to expect for |-setFrame:|. 141 // The value for web view OCMock objects to expect for |-setFrame:|.
139 CGRect GetExpectedWebViewFrame() const { 142 CGRect GetExpectedWebViewFrame() const {
140 CGSize container_view_size = [UIScreen mainScreen].bounds.size; 143 CGSize container_view_size = [UIScreen mainScreen].bounds.size;
141 container_view_size.height -= 144 container_view_size.height -=
142 CGRectGetHeight([UIApplication sharedApplication].statusBarFrame); 145 CGRectGetHeight([UIApplication sharedApplication].statusBarFrame);
143 return {CGPointZero, container_view_size}; 146 return {CGPointZero, container_view_size};
144 } 147 }
145 148
146 // Creates WebView mock. 149 // Creates WebView mock.
147 UIView* CreateMockWebView() { 150 UIView* CreateMockWebView() {
148 id result = [OCMockObject mockForClass:[WKWebView class]]; 151 id result = [OCMockObject mockForClass:[WKWebView class]];
149 152
150 if (base::ios::IsRunningOnIOS10OrLater()) { 153 if (base::ios::IsRunningOnIOS10OrLater()) {
151 [[result stub] serverTrust]; 154 [[result stub] serverTrust];
152 } else { 155 } else {
153 [[result stub] certificateChain]; 156 [[result stub] certificateChain];
154 } 157 }
155 158
156 [[result stub] backForwardList]; 159 [[result stub] backForwardList];
157 [[[result stub] andReturn:[NSURL URLWithString:@(kTestURLString)]] URL]; 160 [[[result stub] andReturn:[NSURL URLWithString:@(kTestURLString)]] URL];
158 [[result stub] setNavigationDelegate:[OCMArg checkWithBlock:^(id delegate) { 161 [[result stub] setNavigationDelegate:[OCMArg checkWithBlock:^(id delegate) {
159 navigation_delegate_.reset(delegate); 162 navigation_delegate_ = delegate;
160 return YES; 163 return YES;
161 }]]; 164 }]];
162 [[result stub] setUIDelegate:OCMOCK_ANY]; 165 [[result stub] setUIDelegate:OCMOCK_ANY];
163 [[result stub] setFrame:GetExpectedWebViewFrame()]; 166 [[result stub] setFrame:GetExpectedWebViewFrame()];
164 [[result stub] addObserver:web_controller() 167 [[result stub] addObserver:web_controller()
165 forKeyPath:OCMOCK_ANY 168 forKeyPath:OCMOCK_ANY
166 options:0 169 options:0
167 context:nullptr]; 170 context:nullptr];
168 [[result stub] removeObserver:web_controller() forKeyPath:OCMOCK_ANY]; 171 [[result stub] removeObserver:web_controller() forKeyPath:OCMOCK_ANY];
169 172
170 return result; 173 return result;
171 } 174 }
172 175
173 base::WeakNSProtocol<id<WKNavigationDelegate>> navigation_delegate_; 176 __weak id<WKNavigationDelegate> navigation_delegate_;
174 base::scoped_nsobject<UIScrollView> scroll_view_; 177 UIScrollView* scroll_view_;
175 base::scoped_nsobject<id> mock_web_view_; 178 id mock_web_view_;
176 }; 179 };
177 180
178 // Tests that AllowCertificateError is called with correct arguments if 181 // Tests that AllowCertificateError is called with correct arguments if
179 // WKWebView fails to load a page with bad SSL cert. 182 // WKWebView fails to load a page with bad SSL cert.
180 TEST_F(CRWWebControllerTest, SslCertError) { 183 TEST_F(CRWWebControllerTest, SslCertError) {
181 web::TestWebStateObserver observer(web_state()); 184 web::TestWebStateObserver observer(web_state());
182 ASSERT_FALSE(observer.did_change_visible_security_state_info()); 185 ASSERT_FALSE(observer.did_change_visible_security_state_info());
183 186
184 // Last arguments passed to AllowCertificateError must be in default state. 187 // Last arguments passed to AllowCertificateError must be in default state.
185 ASSERT_FALSE(GetWebClient()->last_cert_error_code()); 188 ASSERT_FALSE(GetWebClient()->last_cert_error_code());
186 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().is_valid()); 189 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().is_valid());
187 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().cert_status); 190 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().cert_status);
188 ASSERT_FALSE(GetWebClient()->last_cert_error_request_url().is_valid()); 191 ASSERT_FALSE(GetWebClient()->last_cert_error_request_url().is_valid());
189 ASSERT_TRUE(GetWebClient()->last_cert_error_overridable()); 192 ASSERT_TRUE(GetWebClient()->last_cert_error_overridable());
190 193
191 scoped_refptr<net::X509Certificate> cert = 194 scoped_refptr<net::X509Certificate> cert =
192 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); 195 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
193 ASSERT_TRUE(cert); 196 ASSERT_TRUE(cert);
194 base::ScopedCFTypeRef<CFMutableArrayRef> chain( 197 base::ScopedCFTypeRef<CFMutableArrayRef> chain(
195 net::x509_util::CreateSecCertificateArrayForX509Certificate(cert.get())); 198 net::x509_util::CreateSecCertificateArrayForX509Certificate(cert.get()));
196 ASSERT_TRUE(chain); 199 ASSERT_TRUE(chain);
197 200
198 GURL url("https://chromium.test"); 201 GURL url("https://chromium.test");
199 NSError* error = 202 NSError* error =
200 [NSError errorWithDomain:NSURLErrorDomain 203 [NSError errorWithDomain:NSURLErrorDomain
201 code:NSURLErrorServerCertificateHasUnknownRoot 204 code:NSURLErrorServerCertificateHasUnknownRoot
202 userInfo:@{ 205 userInfo:@{
203 web::kNSErrorPeerCertificateChainKey : 206 web::kNSErrorPeerCertificateChainKey :
204 static_cast<NSArray*>(chain.get()), 207 base::mac::CFToNSCast(chain.get()),
205 web::kNSErrorFailingURLKey : net::NSURLWithGURL(url), 208 web::kNSErrorFailingURLKey : net::NSURLWithGURL(url),
206 }]; 209 }];
207 base::scoped_nsobject<NSObject> navigation([[NSObject alloc] init]); 210 NSObject* navigation = [[NSObject alloc] init];
208 [navigation_delegate_ webView:mock_web_view_ 211 [navigation_delegate_ webView:mock_web_view_
209 didStartProvisionalNavigation:static_cast<WKNavigation*>(navigation)]; 212 didStartProvisionalNavigation:static_cast<WKNavigation*>(navigation)];
210 [navigation_delegate_ webView:mock_web_view_ 213 [navigation_delegate_ webView:mock_web_view_
211 didFailProvisionalNavigation:static_cast<WKNavigation*>(navigation) 214 didFailProvisionalNavigation:static_cast<WKNavigation*>(navigation)
212 withError:error]; 215 withError:error];
213 216
214 // Verify correctness of AllowCertificateError method call. 217 // Verify correctness of AllowCertificateError method call.
215 EXPECT_EQ(net::ERR_CERT_INVALID, GetWebClient()->last_cert_error_code()); 218 EXPECT_EQ(net::ERR_CERT_INVALID, GetWebClient()->last_cert_error_code());
216 EXPECT_TRUE(GetWebClient()->last_cert_error_ssl_info().is_valid()); 219 EXPECT_TRUE(GetWebClient()->last_cert_error_ssl_info().is_valid());
217 EXPECT_EQ(net::CERT_STATUS_INVALID, 220 EXPECT_EQ(net::CERT_STATUS_INVALID,
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 645
643 EXPECT_EQ(GURL(kTestURLString), url); 646 EXPECT_EQ(GURL(kTestURLString), url);
644 EXPECT_EQ(web::kAbsolute, trust_level); 647 EXPECT_EQ(web::kAbsolute, trust_level);
645 } 648 }
646 649
647 // Test fixture for testing CRWWebController presenting native content. 650 // Test fixture for testing CRWWebController presenting native content.
648 class CRWWebControllerNativeContentTest : public web::WebTestWithWebController { 651 class CRWWebControllerNativeContentTest : public web::WebTestWithWebController {
649 protected: 652 protected:
650 void SetUp() override { 653 void SetUp() override {
651 web::WebTestWithWebController::SetUp(); 654 web::WebTestWithWebController::SetUp();
652 mock_native_provider_.reset([[TestNativeContentProvider alloc] init]); 655 mock_native_provider_ = [[TestNativeContentProvider alloc] init];
653 [web_controller() setNativeProvider:mock_native_provider_]; 656 [web_controller() setNativeProvider:mock_native_provider_];
654 } 657 }
655 658
656 void Load(const GURL& URL) { 659 void Load(const GURL& URL) {
657 NavigationManagerImpl& navigation_manager = 660 NavigationManagerImpl& navigation_manager =
658 [web_controller() webStateImpl]->GetNavigationManagerImpl(); 661 [web_controller() webStateImpl]->GetNavigationManagerImpl();
659 navigation_manager.AddPendingItem( 662 navigation_manager.AddPendingItem(
660 URL, web::Referrer(), ui::PAGE_TRANSITION_TYPED, 663 URL, web::Referrer(), ui::PAGE_TRANSITION_TYPED,
661 web::NavigationInitiationType::USER_INITIATED, 664 web::NavigationInitiationType::USER_INITIATED,
662 web::NavigationManager::UserAgentOverrideOption::INHERIT); 665 web::NavigationManager::UserAgentOverrideOption::INHERIT);
663 [web_controller() loadCurrentURL]; 666 [web_controller() loadCurrentURL];
664 } 667 }
665 668
666 base::scoped_nsobject<TestNativeContentProvider> mock_native_provider_; 669 TestNativeContentProvider* mock_native_provider_;
667 }; 670 };
668 671
669 // Tests WebState and NavigationManager correctly return native content URL. 672 // Tests WebState and NavigationManager correctly return native content URL.
670 TEST_F(CRWWebControllerNativeContentTest, NativeContentURL) { 673 TEST_F(CRWWebControllerNativeContentTest, NativeContentURL) {
671 GURL url_to_load(kTestAppSpecificURL); 674 GURL url_to_load(kTestAppSpecificURL);
672 base::scoped_nsobject<TestNativeContent> content( 675 TestNativeContent* content =
673 [[TestNativeContent alloc] initWithURL:url_to_load virtualURL:GURL()]); 676 [[TestNativeContent alloc] initWithURL:url_to_load virtualURL:GURL()];
674 [mock_native_provider_ setController:content forURL:url_to_load]; 677 [mock_native_provider_ setController:content forURL:url_to_load];
675 Load(url_to_load); 678 Load(url_to_load);
676 web::URLVerificationTrustLevel trust_level = web::kNone; 679 web::URLVerificationTrustLevel trust_level = web::kNone;
677 GURL gurl = [web_controller() currentURLWithTrustLevel:&trust_level]; 680 GURL gurl = [web_controller() currentURLWithTrustLevel:&trust_level];
678 EXPECT_EQ(gurl, url_to_load); 681 EXPECT_EQ(gurl, url_to_load);
679 EXPECT_EQ(web::kAbsolute, trust_level); 682 EXPECT_EQ(web::kAbsolute, trust_level);
680 EXPECT_EQ([web_controller() webState]->GetVisibleURL(), url_to_load); 683 EXPECT_EQ([web_controller() webState]->GetVisibleURL(), url_to_load);
681 NavigationManagerImpl& navigationManager = 684 NavigationManagerImpl& navigationManager =
682 [web_controller() webStateImpl]->GetNavigationManagerImpl(); 685 [web_controller() webStateImpl]->GetNavigationManagerImpl();
683 EXPECT_EQ(navigationManager.GetVisibleItem()->GetURL(), url_to_load); 686 EXPECT_EQ(navigationManager.GetVisibleItem()->GetURL(), url_to_load);
684 EXPECT_EQ(navigationManager.GetVisibleItem()->GetVirtualURL(), url_to_load); 687 EXPECT_EQ(navigationManager.GetVisibleItem()->GetVirtualURL(), url_to_load);
685 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetURL(), url_to_load); 688 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetURL(), url_to_load);
686 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetVirtualURL(), 689 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetVirtualURL(),
687 url_to_load); 690 url_to_load);
688 } 691 }
689 692
690 // Tests WebState and NavigationManager correctly return native content URL and 693 // Tests WebState and NavigationManager correctly return native content URL and
691 // VirtualURL 694 // VirtualURL
692 TEST_F(CRWWebControllerNativeContentTest, NativeContentVirtualURL) { 695 TEST_F(CRWWebControllerNativeContentTest, NativeContentVirtualURL) {
693 GURL url_to_load(kTestAppSpecificURL); 696 GURL url_to_load(kTestAppSpecificURL);
694 GURL virtual_url(kTestURLString); 697 GURL virtual_url(kTestURLString);
695 base::scoped_nsobject<TestNativeContent> content([[TestNativeContent alloc] 698 TestNativeContent* content =
696 initWithURL:virtual_url 699 [[TestNativeContent alloc] initWithURL:virtual_url
697 virtualURL:virtual_url]); 700 virtualURL:virtual_url];
698 [mock_native_provider_ setController:content forURL:url_to_load]; 701 [mock_native_provider_ setController:content forURL:url_to_load];
699 Load(url_to_load); 702 Load(url_to_load);
700 web::URLVerificationTrustLevel trust_level = web::kNone; 703 web::URLVerificationTrustLevel trust_level = web::kNone;
701 GURL gurl = [web_controller() currentURLWithTrustLevel:&trust_level]; 704 GURL gurl = [web_controller() currentURLWithTrustLevel:&trust_level];
702 EXPECT_EQ(gurl, virtual_url); 705 EXPECT_EQ(gurl, virtual_url);
703 EXPECT_EQ(web::kAbsolute, trust_level); 706 EXPECT_EQ(web::kAbsolute, trust_level);
704 EXPECT_EQ([web_controller() webState]->GetVisibleURL(), virtual_url); 707 EXPECT_EQ([web_controller() webState]->GetVisibleURL(), virtual_url);
705 NavigationManagerImpl& navigationManager = 708 NavigationManagerImpl& navigationManager =
706 [web_controller() webStateImpl]->GetNavigationManagerImpl(); 709 [web_controller() webStateImpl]->GetNavigationManagerImpl();
707 EXPECT_EQ(navigationManager.GetVisibleItem()->GetURL(), url_to_load); 710 EXPECT_EQ(navigationManager.GetVisibleItem()->GetURL(), url_to_load);
708 EXPECT_EQ(navigationManager.GetVisibleItem()->GetVirtualURL(), virtual_url); 711 EXPECT_EQ(navigationManager.GetVisibleItem()->GetVirtualURL(), virtual_url);
709 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetURL(), url_to_load); 712 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetURL(), url_to_load);
710 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetVirtualURL(), 713 EXPECT_EQ(navigationManager.GetLastCommittedItem()->GetVirtualURL(),
711 virtual_url); 714 virtual_url);
712 } 715 }
713 716
714 // A separate test class, as none of the |CRWUIWebViewWebControllerTest| setup 717 // A separate test class, as none of the |CRWUIWebViewWebControllerTest| setup
715 // is needed; 718 // is needed;
716 typedef web::WebTestWithWebController CRWWebControllerObserversTest; 719 typedef web::WebTestWithWebController CRWWebControllerObserversTest;
717 720
718 // Tests that CRWWebControllerObservers are called. 721 // Tests that CRWWebControllerObservers are called.
719 TEST_F(CRWWebControllerObserversTest, Observers) { 722 TEST_F(CRWWebControllerObserversTest, Observers) {
720 base::scoped_nsobject<CountingObserver> observer( 723 CountingObserver* observer = [[CountingObserver alloc] init];
721 [[CountingObserver alloc] init]);
722 EXPECT_EQ(0u, [web_controller() observerCount]); 724 EXPECT_EQ(0u, [web_controller() observerCount]);
723 [web_controller() addObserver:observer]; 725 [web_controller() addObserver:observer];
724 EXPECT_EQ(1u, [web_controller() observerCount]); 726 EXPECT_EQ(1u, [web_controller() observerCount]);
725 727
726 EXPECT_EQ(0, [observer pageLoadedCount]); 728 EXPECT_EQ(0, [observer pageLoadedCount]);
727 [web_controller() webStateImpl]->OnPageLoaded(GURL("http://test"), false); 729 [web_controller() webStateImpl]->OnPageLoaded(GURL("http://test"), false);
728 EXPECT_EQ(0, [observer pageLoadedCount]); 730 EXPECT_EQ(0, [observer pageLoadedCount]);
729 [web_controller() webStateImpl]->OnPageLoaded(GURL("http://test"), true); 731 [web_controller() webStateImpl]->OnPageLoaded(GURL("http://test"), true);
730 EXPECT_EQ(1, [observer pageLoadedCount]); 732 EXPECT_EQ(1, [observer pageLoadedCount]);
731 733
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 protected: 871 protected:
870 // Calls |executeUserJavaScript:completionHandler:|, waits for script 872 // Calls |executeUserJavaScript:completionHandler:|, waits for script
871 // execution completion, and synchronously returns the result. 873 // execution completion, and synchronously returns the result.
872 id ExecuteUserJavaScript(NSString* java_script, NSError** error) { 874 id ExecuteUserJavaScript(NSString* java_script, NSError** error) {
873 __block id script_result = nil; 875 __block id script_result = nil;
874 __block NSError* script_error = nil; 876 __block NSError* script_error = nil;
875 __block bool script_executed = false; 877 __block bool script_executed = false;
876 [web_controller() 878 [web_controller()
877 executeUserJavaScript:java_script 879 executeUserJavaScript:java_script
878 completionHandler:^(id local_result, NSError* local_error) { 880 completionHandler:^(id local_result, NSError* local_error) {
879 script_result = [local_result retain]; 881 script_result = local_result;
880 script_error = [local_error retain]; 882 script_error = local_error;
881 script_executed = true; 883 script_executed = true;
882 }]; 884 }];
883 885
884 WaitForCondition(^{ 886 WaitForCondition(^{
885 return script_executed; 887 return script_executed;
886 }); 888 });
887 889
888 if (error) { 890 if (error) {
889 *error = script_error; 891 *error = script_error;
890 } 892 }
891 [script_error autorelease]; 893 return script_result;
892 return [script_result autorelease];
893 } 894 }
894 }; 895 };
895 896
896 // Tests evaluating user script on an http page. 897 // Tests evaluating user script on an http page.
897 TEST_F(ScriptExecutionTest, UserScriptOnHttpPage) { 898 TEST_F(ScriptExecutionTest, UserScriptOnHttpPage) {
898 LoadHtml(@"<html></html>", GURL(kTestURLString)); 899 LoadHtml(@"<html></html>", GURL(kTestURLString));
899 NSError* error = nil; 900 NSError* error = nil;
900 EXPECT_NSEQ(@0, ExecuteUserJavaScript(@"window.w = 0;", &error)); 901 EXPECT_NSEQ(@0, ExecuteUserJavaScript(@"window.w = 0;", &error));
901 EXPECT_FALSE(error); 902 EXPECT_FALSE(error);
902 903
(...skipping 22 matching lines...) Expand all
925 EXPECT_EQ(web::JS_EVALUATION_ERROR_CODE_NO_WEB_VIEW, error.code); 926 EXPECT_EQ(web::JS_EVALUATION_ERROR_CODE_NO_WEB_VIEW, error.code);
926 927
927 EXPECT_FALSE(ExecuteJavaScript(@"window.w")); 928 EXPECT_FALSE(ExecuteJavaScript(@"window.w"));
928 }; 929 };
929 930
930 // Fixture class to test WKWebView crashes. 931 // Fixture class to test WKWebView crashes.
931 class CRWWebControllerWebProcessTest : public web::WebTestWithWebController { 932 class CRWWebControllerWebProcessTest : public web::WebTestWithWebController {
932 protected: 933 protected:
933 void SetUp() override { 934 void SetUp() override {
934 web::WebTestWithWebController::SetUp(); 935 web::WebTestWithWebController::SetUp();
935 webView_.reset([web::BuildTerminatedWKWebView() retain]); 936 webView_ = web::BuildTerminatedWKWebView();
936 base::scoped_nsobject<TestWebViewContentView> webViewContentView( 937 TestWebViewContentView* webViewContentView = [[TestWebViewContentView alloc]
937 [[TestWebViewContentView alloc] 938 initWithMockWebView:webView_
938 initWithMockWebView:webView_ 939 scrollView:[webView_ scrollView]];
939 scrollView:[webView_ scrollView]]);
940 [web_controller() injectWebViewContentView:webViewContentView]; 940 [web_controller() injectWebViewContentView:webViewContentView];
941 941
942 // This test intentionally crashes the render process. 942 // This test intentionally crashes the render process.
943 SetIgnoreRenderProcessCrashesDuringTesting(true); 943 SetIgnoreRenderProcessCrashesDuringTesting(true);
944 } 944 }
945 base::scoped_nsobject<WKWebView> webView_; 945 WKWebView* webView_;
946 }; 946 };
947 947
948 // Tests that WebStateDelegate::RenderProcessGone is called when WKWebView web 948 // Tests that WebStateDelegate::RenderProcessGone is called when WKWebView web
949 // process has crashed. 949 // process has crashed.
950 TEST_F(CRWWebControllerWebProcessTest, Crash) { 950 TEST_F(CRWWebControllerWebProcessTest, Crash) {
951 web::TestWebStateObserver observer(web_state()); 951 web::TestWebStateObserver observer(web_state());
952 web::TestWebStateObserver* observer_ptr = &observer; 952 web::TestWebStateObserver* observer_ptr = &observer;
953 web::SimulateWKWebViewCrash(webView_); 953 web::SimulateWKWebViewCrash(webView_);
954 base::test::ios::WaitUntilCondition(^bool() { 954 base::test::ios::WaitUntilCondition(^bool() {
955 return observer_ptr->render_process_gone_info(); 955 return observer_ptr->render_process_gone_info();
956 }); 956 });
957 EXPECT_EQ(web_state(), observer.render_process_gone_info()->web_state); 957 EXPECT_EQ(web_state(), observer.render_process_gone_info()->web_state);
958 EXPECT_FALSE([web_controller() isViewAlive]); 958 EXPECT_FALSE([web_controller() isViewAlive]);
959 }; 959 };
960 960
961 } // namespace 961 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698