| // Copyright 2018 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/public/navigation/web_state_policy_decider_bridge.h" |
| |
| #import "base/functional/callback_helpers.h" |
| #import "ios/web/public/test/fakes/crw_fake_web_state_policy_decider.h" |
| #import "ios/web/public/test/fakes/fake_web_state.h" |
| #import "testing/platform_test.h" |
| |
| namespace web { |
| |
| // Test fixture to test WebStatePolicyDeciderBridge class. |
| class WebStatePolicyDeciderBridgeTest : public PlatformTest { |
| public: |
| WebStatePolicyDeciderBridgeTest() |
| : decider_([[CRWFakeWebStatePolicyDecider alloc] init]), |
| decider_bridge_(&fake_web_state_, decider_) {} |
| |
| protected: |
| web::FakeWebState fake_web_state_; |
| CRWFakeWebStatePolicyDecider* decider_; |
| WebStatePolicyDeciderBridge decider_bridge_; |
| }; |
| |
| // Tests `shouldAllowRequest:requestInfo:` forwarding. |
| TEST_F(WebStatePolicyDeciderBridgeTest, ShouldAllowRequest) { |
| ASSERT_FALSE([decider_ shouldAllowRequestInfo]); |
| NSURL* url = [NSURL URLWithString:@"http://test.url"]; |
| NSURLRequest* request = [NSURLRequest requestWithURL:url]; |
| const ui::PageTransition transition_type = |
| ui::PageTransition::PAGE_TRANSITION_LINK; |
| const bool target_frame_is_main = true; |
| const bool target_frame_is_cross_origin = false; |
| const bool target_window_is_cross_origin = false; |
| const bool is_user_initiated = false; |
| const bool user_tapped_recently = false; |
| const WebStatePolicyDecider::RequestInfo request_info( |
| transition_type, target_frame_is_main, target_frame_is_cross_origin, |
| target_window_is_cross_origin, is_user_initiated, user_tapped_recently); |
| decider_bridge_.ShouldAllowRequest(request, request_info, base::DoNothing()); |
| const FakeShouldAllowRequestInfo* should_allow_request_info = |
| [decider_ shouldAllowRequestInfo]; |
| ASSERT_TRUE(should_allow_request_info); |
| EXPECT_EQ(request, should_allow_request_info->request); |
| EXPECT_EQ(target_frame_is_main, |
| should_allow_request_info->request_info.target_frame_is_main); |
| EXPECT_EQ(is_user_initiated, |
| should_allow_request_info->request_info.is_user_initiated); |
| EXPECT_EQ(user_tapped_recently, |
| should_allow_request_info->request_info.user_tapped_recently); |
| EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( |
| transition_type, |
| should_allow_request_info->request_info.transition_type)); |
| } |
| |
| // Tests `decidePolicyForNavigationResponse:responseInfo:completionHandler:` |
| // forwarding. |
| TEST_F(WebStatePolicyDeciderBridgeTest, DecidePolicyForNavigationResponse) { |
| ASSERT_FALSE([decider_ decidePolicyForNavigationResponseInfo]); |
| NSURL* url = [NSURL URLWithString:@"http://test.url"]; |
| NSURLResponse* response = [[NSURLResponse alloc] initWithURL:url |
| MIMEType:@"text/html" |
| expectedContentLength:0 |
| textEncodingName:nil]; |
| const bool for_main_frame = true; |
| const WebStatePolicyDecider::ResponseInfo response_info(for_main_frame); |
| decider_bridge_.ShouldAllowResponse(response, response_info, |
| base::DoNothing()); |
| const FakeDecidePolicyForNavigationResponseInfo* |
| decide_policy_for_navigation_response_info = |
| [decider_ decidePolicyForNavigationResponseInfo]; |
| ASSERT_TRUE(decide_policy_for_navigation_response_info); |
| EXPECT_EQ(response, decide_policy_for_navigation_response_info->response); |
| EXPECT_EQ( |
| for_main_frame, |
| decide_policy_for_navigation_response_info->response_info.for_main_frame); |
| } |
| |
| } // namespace web |