| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_wk_navigation_states.h" | 5 #import "ios/web/web_state/ui/crw_wk_navigation_states.h" |
| 6 | 6 |
| 7 #import <WebKit/WebKit.h> | 7 #import <WebKit/WebKit.h> |
| 8 | 8 |
| 9 #import "base/mac/scoped_nsobject.h" | 9 #import "base/mac/scoped_nsobject.h" |
| 10 #include "ios/web/web_state/navigation_context_impl.h" |
| 11 #include "net/http/http_response_headers.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "testing/platform_test.h" | 13 #include "testing/platform_test.h" |
| 14 #include "url/gurl.h" |
| 15 |
| 16 namespace { |
| 17 const char kTestUrl1[] = "https://test1.test/"; |
| 18 const char kTestUrl2[] = "https://test2.test/"; |
| 19 } |
| 12 | 20 |
| 13 namespace web { | 21 namespace web { |
| 14 | 22 |
| 15 // Test fixture for CRWWKNavigationStates testing. | 23 // Test fixture for CRWWKNavigationStates testing. |
| 16 class CRWWKNavigationStatesTest : public PlatformTest { | 24 class CRWWKNavigationStatesTest : public PlatformTest { |
| 17 protected: | 25 protected: |
| 18 CRWWKNavigationStatesTest() | 26 CRWWKNavigationStatesTest() |
| 19 : navigation1_(static_cast<WKNavigation*>([[NSObject alloc] init])), | 27 : navigation1_(static_cast<WKNavigation*>([[NSObject alloc] init])), |
| 20 navigation2_(static_cast<WKNavigation*>([[NSObject alloc] init])), | 28 navigation2_(static_cast<WKNavigation*>([[NSObject alloc] init])), |
| 29 navigation3_(static_cast<WKNavigation*>([[NSObject alloc] init])), |
| 21 states_([[CRWWKNavigationStates alloc] init]) {} | 30 states_([[CRWWKNavigationStates alloc] init]) {} |
| 22 | 31 |
| 23 protected: | 32 protected: |
| 24 base::scoped_nsobject<WKNavigation> navigation1_; | 33 base::scoped_nsobject<WKNavigation> navigation1_; |
| 25 base::scoped_nsobject<WKNavigation> navigation2_; | 34 base::scoped_nsobject<WKNavigation> navigation2_; |
| 35 base::scoped_nsobject<WKNavigation> navigation3_; |
| 26 base::scoped_nsobject<CRWWKNavigationStates> states_; | 36 base::scoped_nsobject<CRWWKNavigationStates> states_; |
| 27 }; | 37 }; |
| 28 | 38 |
| 29 // Tests |removeNavigation:| method. | 39 // Tests |removeNavigation:| method. |
| 30 TEST_F(CRWWKNavigationStatesTest, RemovingNavigation) { | 40 TEST_F(CRWWKNavigationStatesTest, RemovingNavigation) { |
| 31 // navigation_1 is the only navigation and it is the latest. | 41 // navigation_1 is the only navigation and it is the latest. |
| 32 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_]; | 42 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_]; |
| 33 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]); | 43 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]); |
| 34 [states_ removeNavigation:navigation1_]; | 44 [states_ removeNavigation:navigation1_]; |
| 35 ASSERT_FALSE([states_ lastAddedNavigation]); | 45 ASSERT_FALSE([states_ lastAddedNavigation]); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 49 | 59 |
| 50 // Updating state for existing navigation does not make it the latest. | 60 // Updating state for existing navigation does not make it the latest. |
| 51 [states_ setState:WKNavigationState::STARTED forNavigation:navigation1_]; | 61 [states_ setState:WKNavigationState::STARTED forNavigation:navigation1_]; |
| 52 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]); | 62 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]); |
| 53 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]); | 63 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]); |
| 54 | 64 |
| 55 // navigation_2 is still the latest. | 65 // navigation_2 is still the latest. |
| 56 [states_ setState:WKNavigationState::STARTED forNavigation:navigation2_]; | 66 [states_ setState:WKNavigationState::STARTED forNavigation:navigation2_]; |
| 57 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]); | 67 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]); |
| 58 EXPECT_EQ(WKNavigationState::STARTED, [states_ lastAddedNavigationState]); | 68 EXPECT_EQ(WKNavigationState::STARTED, [states_ lastAddedNavigationState]); |
| 69 |
| 70 // navigation_3 is added later and hence the latest. |
| 71 std::unique_ptr<web::NavigationContextImpl> context = |
| 72 NavigationContextImpl::CreateSameDocumentNavigationContext( |
| 73 nullptr /*web_state*/, GURL(kTestUrl1)); |
| 74 [states_ setContext:std::move(context) forNavigation:navigation3_]; |
| 75 EXPECT_EQ(navigation3_, [states_ lastAddedNavigation]); |
| 76 EXPECT_EQ(WKNavigationState::NONE, [states_ lastAddedNavigationState]); |
| 77 } |
| 78 |
| 79 // Tests |setContext:forNavigation:| and |contextForNavigaiton:| methods. |
| 80 TEST_F(CRWWKNavigationStatesTest, Context) { |
| 81 EXPECT_FALSE([states_ contextForNavigation:navigation1_]); |
| 82 EXPECT_FALSE([states_ contextForNavigation:navigation2_]); |
| 83 EXPECT_FALSE([states_ contextForNavigation:navigation3_]); |
| 84 |
| 85 // Add first context. |
| 86 std::unique_ptr<web::NavigationContextImpl> context1 = |
| 87 NavigationContextImpl::CreateSameDocumentNavigationContext( |
| 88 nullptr /*web_state*/, GURL(kTestUrl1)); |
| 89 [states_ setContext:std::move(context1) forNavigation:navigation1_]; |
| 90 EXPECT_FALSE([states_ contextForNavigation:navigation2_]); |
| 91 EXPECT_FALSE([states_ contextForNavigation:navigation3_]); |
| 92 ASSERT_TRUE([states_ contextForNavigation:navigation1_]); |
| 93 EXPECT_EQ(GURL(kTestUrl1), |
| 94 [states_ contextForNavigation:navigation1_]->GetUrl()); |
| 95 EXPECT_TRUE([states_ contextForNavigation:navigation1_]->IsSameDocument()); |
| 96 EXPECT_FALSE([states_ contextForNavigation:navigation1_]->IsErrorPage()); |
| 97 |
| 98 // Replace existing context. |
| 99 std::unique_ptr<web::NavigationContextImpl> context2 = |
| 100 NavigationContextImpl::CreateErrorPageNavigationContext( |
| 101 nullptr /*web_state*/, GURL(kTestUrl2), |
| 102 nullptr /* response_headers */); |
| 103 [states_ setContext:std::move(context2) forNavigation:navigation1_]; |
| 104 EXPECT_FALSE([states_ contextForNavigation:navigation2_]); |
| 105 EXPECT_FALSE([states_ contextForNavigation:navigation3_]); |
| 106 ASSERT_TRUE([states_ contextForNavigation:navigation1_]); |
| 107 EXPECT_EQ(GURL(kTestUrl2), |
| 108 [states_ contextForNavigation:navigation1_]->GetUrl()); |
| 109 EXPECT_FALSE([states_ contextForNavigation:navigation1_]->IsSameDocument()); |
| 110 EXPECT_TRUE([states_ contextForNavigation:navigation1_]->IsErrorPage()); |
| 59 } | 111 } |
| 60 | 112 |
| 61 } // namespace web | 113 } // namespace web |
| OLD | NEW |