| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/web/test/web_test_with_web_controller.h" |
| |
| #import "ios/web/public/web_client.h" |
| #import "ios/web/web_state/ui/wk_web_view_configuration_provider.h" |
| #import "ios/web/web_state/web_state_impl.h" |
| |
| namespace web { |
| |
| WebTestWithWebController::WebTestWithWebController() {} |
| |
| WebTestWithWebController::WebTestWithWebController( |
| std::unique_ptr<web::WebClient> web_client) |
| : WebTestWithWebState(std::move(web_client)) {} |
| |
| WebTestWithWebController::~WebTestWithWebController() {} |
| |
| void WebTestWithWebController::SetUp() { |
| WebTestWithWebState::SetUp(); |
| |
| // WebViewConfiguration must be configured before triggering any navigations. |
| // Otherwise, the JavaScriptContentWorld instances will never be created, |
| // triggering a crash on navigation. In Chrome, this happens in |
| // `WKWebViewConfigurationProvider::UpdateScripts`, but that method is often |
| // not called for tests using this fixture class due to fake and mock classes. |
| WKWebViewConfigurationProvider::FromBrowserState(GetBrowserState()) |
| .GetWebViewConfiguration(); |
| } |
| |
| CRWWebController* WebTestWithWebController::web_controller() { |
| if (!web_state()) { |
| return nullptr; |
| } |
| return web::WebStateImpl::FromWebState(web_state())->GetWebController(); |
| } |
| |
| } // namespace web |