| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FUCHSIA_BASE_TEST_NAVIGATION_LISTENER_H_ |
| #define FUCHSIA_BASE_TEST_NAVIGATION_LISTENER_H_ |
| |
| #include <fuchsia/web/cpp/fidl.h> |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/optional.h" |
| #include "url/gurl.h" |
| |
| namespace cr_fuchsia { |
| |
| // Observes navigation events and enables test code to block until a desired |
| // navigational state is observed. |
| class TestNavigationListener : public fuchsia::web::NavigationEventListener { |
| public: |
| using BeforeAckCallback = |
| base::RepeatingCallback<void(const fuchsia::web::NavigationState& change, |
| OnNavigationStateChangedCallback)>; |
| |
| TestNavigationListener(); |
| ~TestNavigationListener() final; |
| |
| // Spins a RunLoop until the navigation state of the page matches the fields |
| // of |expected_state| that have been set. |
| void RunUntilNavigationStateMatches( |
| const fuchsia::web::NavigationState& expected_state); |
| |
| // Calls RunUntilNavigationStateMatches with a NavigationState that has |
| // |expected_url|. |
| void RunUntilUrlEquals(const GURL& expected_url); |
| |
| // Calls RunUntilNavigationStateMatches with a NavigationState that has |
| // |expected_title|. |
| void RunUntilTitleEquals(const base::StringPiece expected_title); |
| |
| // Calls RunUntilNavigationStateMatches with a NavigationState that has |
| // |expected_url| and |expected_title|. |
| void RunUntilUrlAndTitleEquals(const GURL& expected_url, |
| base::StringPiece expected_title); |
| |
| // Calls RunUntilNavigationStateMatches with a NavigationState that has |
| // all the expected fields. |
| void RunUntilUrlTitleBackForwardEquals(const GURL& expected_url, |
| base::StringPiece expected_title, |
| bool expected_can_go_back, |
| bool expected_can_go_forward); |
| |
| // Register a callback which intercepts the execution of the event |
| // acknowledgement callback. |before_ack| takes ownership of the |
| // acknowledgement callback and the responsibility for executing it. |
| // The default behavior can be restored by providing an unbound callback for |
| // |before_ack|. |
| void SetBeforeAckHook(BeforeAckCallback before_ack); |
| |
| private: |
| // fuchsia::web::NavigationEventListener implementation. |
| void OnNavigationStateChanged( |
| fuchsia::web::NavigationState change, |
| OnNavigationStateChangedCallback callback) final; |
| |
| fuchsia::web::NavigationState current_state_; |
| |
| BeforeAckCallback before_ack_; |
| |
| // Compare the current state with all fields of |expected| that have been set. |
| bool AllFieldsMatch(const fuchsia::web::NavigationState& expected); |
| |
| DISALLOW_COPY_AND_ASSIGN(TestNavigationListener); |
| }; |
| |
| } // namespace cr_fuchsia |
| |
| #endif // FUCHSIA_BASE_TEST_NAVIGATION_LISTENER_H_ |