OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/test/web_int_test.h" | 5 #import "ios/web/test/web_int_test.h" |
6 | 6 |
7 #import "base/ios/block_types.h" | 7 #import "base/ios/block_types.h" |
8 | 8 #include "base/memory/ptr_util.h" |
9 #import "base/test/ios/wait_util.h" | 9 #import "base/test/ios/wait_util.h" |
10 #import "ios/web/public/test/http_server.h" | 10 #import "ios/web/public/test/http_server.h" |
| 11 #import "ios/web/public/test/js_test_util.h" |
| 12 #include "ios/web/public/web_state/web_state_observer.h" |
11 #import "ios/web/public/web_view_creation_util.h" | 13 #import "ios/web/public/web_view_creation_util.h" |
12 | 14 |
13 namespace web { | 15 namespace web { |
14 | 16 |
| 17 #pragma mark - IntTestWebStateObserver |
| 18 |
| 19 // WebStateObserver class that is used to track when page loads finish. |
| 20 class IntTestWebStateObserver : public web::WebStateObserver { |
| 21 public: |
| 22 IntTestWebStateObserver(web::WebState* web_state) |
| 23 : web::WebStateObserver(web_state), page_loaded_(false) {} |
| 24 |
| 25 // Instructs the observer to listen for page loads for |url|. |
| 26 void ExpectPageLoad(const GURL& url) { |
| 27 expected_url_ = url; |
| 28 page_loaded_ = false; |
| 29 } |
| 30 |
| 31 // Whether |expected_url_| has been loaded successfully. |
| 32 bool IsExpectedPageLoaded() { return page_loaded_; } |
| 33 |
| 34 // WebStateObserver methods: |
| 35 void PageLoaded( |
| 36 web::PageLoadCompletionStatus load_completion_status) override { |
| 37 ASSERT_EQ(load_completion_status == web::PageLoadCompletionStatus::SUCCESS, |
| 38 expected_url_.is_valid()); |
| 39 page_loaded_ = true; |
| 40 } |
| 41 |
| 42 private: |
| 43 GURL expected_url_; |
| 44 bool page_loaded_; |
| 45 }; |
| 46 |
| 47 #pragma mark - WebIntTest |
| 48 |
15 WebIntTest::WebIntTest() {} | 49 WebIntTest::WebIntTest() {} |
16 WebIntTest::~WebIntTest() {} | 50 WebIntTest::~WebIntTest() {} |
17 | 51 |
18 void WebIntTest::SetUp() { | 52 void WebIntTest::SetUp() { |
19 WebTest::SetUp(); | 53 WebTest::SetUp(); |
20 | 54 |
| 55 // Start the http server. |
21 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance(); | 56 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance(); |
22 ASSERT_FALSE(server.IsRunning()); | 57 ASSERT_FALSE(server.IsRunning()); |
23 server.StartOrDie(); | 58 server.StartOrDie(); |
24 | 59 |
| 60 // Remove any previously existing WKWebView data. |
25 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore], | 61 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore], |
26 [WKWebsiteDataStore allWebsiteDataTypes]); | 62 [WKWebsiteDataStore allWebsiteDataTypes]); |
| 63 |
| 64 // Create the WebState and its WebStateObserver. |
| 65 web::WebState::CreateParams web_state_create_params(GetBrowserState()); |
| 66 web_state_ = web::WebState::Create(web_state_create_params); |
| 67 observer_ = base::WrapUnique(new IntTestWebStateObserver(web_state())); |
| 68 |
| 69 // Resize the webview so that pages can be properly rendered. |
| 70 web_state()->GetView().frame = |
| 71 [UIApplication sharedApplication].keyWindow.bounds; |
| 72 |
| 73 // Enable web usage for the WebState. |
| 74 web_state()->SetWebUsageEnabled(true); |
27 } | 75 } |
28 | 76 |
29 void WebIntTest::TearDown() { | 77 void WebIntTest::TearDown() { |
30 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore], | 78 RemoveWKWebViewCreatedData([WKWebsiteDataStore defaultDataStore], |
31 [WKWebsiteDataStore allWebsiteDataTypes]); | 79 [WKWebsiteDataStore allWebsiteDataTypes]); |
32 | 80 |
33 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance(); | 81 web::test::HttpServer& server = web::test::HttpServer::GetSharedInstance(); |
34 server.Stop(); | 82 server.Stop(); |
35 EXPECT_FALSE(server.IsRunning()); | 83 EXPECT_FALSE(server.IsRunning()); |
36 | 84 |
37 WebTest::TearDown(); | 85 WebTest::TearDown(); |
38 } | 86 } |
39 | 87 |
| 88 id WebIntTest::ExecuteJavaScript(NSString* script) { |
| 89 return web::ExecuteJavaScript(web_state()->GetJSInjectionReceiver(), script); |
| 90 } |
| 91 |
| 92 void WebIntTest::ExecuteBlockAndWaitForLoad(const GURL& url, |
| 93 ProceduralBlock block) { |
| 94 DCHECK(block); |
| 95 observer_->ExpectPageLoad(url); |
| 96 block(); |
| 97 base::test::ios::WaitUntilCondition(^bool { |
| 98 return observer_->IsExpectedPageLoaded(); |
| 99 }); |
| 100 } |
| 101 |
| 102 void WebIntTest::LoadUrl(const GURL& url) { |
| 103 ExecuteBlockAndWaitForLoad(url, ^{ |
| 104 web::NavigationManager::WebLoadParams params(url); |
| 105 navigation_manager()->LoadURLWithParams(params); |
| 106 }); |
| 107 } |
| 108 |
40 void WebIntTest::RemoveWKWebViewCreatedData(WKWebsiteDataStore* data_store, | 109 void WebIntTest::RemoveWKWebViewCreatedData(WKWebsiteDataStore* data_store, |
41 NSSet* websiteDataTypes) { | 110 NSSet* websiteDataTypes) { |
42 __block bool data_removed = false; | 111 __block bool data_removed = false; |
43 | 112 |
44 ProceduralBlock remove_data = ^{ | 113 ProceduralBlock remove_data = ^{ |
45 [data_store removeDataOfTypes:websiteDataTypes | 114 [data_store removeDataOfTypes:websiteDataTypes |
46 modifiedSince:[NSDate distantPast] | 115 modifiedSince:[NSDate distantPast] |
47 completionHandler:^{ | 116 completionHandler:^{ |
48 data_removed = true; | 117 data_removed = true; |
49 }]; | 118 }]; |
(...skipping 14 matching lines...) Expand all Loading... |
64 }]; | 133 }]; |
65 } else { | 134 } else { |
66 remove_data(); | 135 remove_data(); |
67 } | 136 } |
68 | 137 |
69 base::test::ios::WaitUntilCondition(^bool { | 138 base::test::ios::WaitUntilCondition(^bool { |
70 return data_removed; | 139 return data_removed; |
71 }); | 140 }); |
72 } | 141 } |
73 | 142 |
| 143 NSInteger WebIntTest::GetIndexOfNavigationItem( |
| 144 const web::NavigationItem* item) { |
| 145 for (NSInteger i = 0; i < navigation_manager()->GetItemCount(); ++i) { |
| 146 if (navigation_manager()->GetItemAtIndex(i) == item) |
| 147 return i; |
| 148 } |
| 149 return NSNotFound; |
| 150 } |
| 151 |
74 } // namespace web | 152 } // namespace web |
OLD | NEW |