123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // 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_WEB_COMMON_TEST_TEST_NAVIGATION_LISTENER_H_
- #define FUCHSIA_WEB_COMMON_TEST_TEST_NAVIGATION_LISTENER_H_
- #include <fuchsia/web/cpp/fidl.h>
- #include <string>
- #include "base/callback.h"
- #include "url/gurl.h"
- // Observes navigation events and enables test code to block until a desired
- // navigational state is observed.
- // When run with -v1, information about navigation state transitions and
- // unmet test expectations are logged.
- class TestNavigationListener final
- : public fuchsia::web::NavigationEventListener {
- public:
- using BeforeAckCallback =
- base::RepeatingCallback<void(const fuchsia::web::NavigationState& change,
- OnNavigationStateChangedCallback)>;
- TestNavigationListener();
- ~TestNavigationListener() override;
- TestNavigationListener(const TestNavigationListener&) = delete;
- TestNavigationListener& operator=(const TestNavigationListener&) = delete;
- // 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
- // the main document loaded and the normal page type.
- void RunUntilLoaded();
- // Calls RunUntilNavigationStateMatches with a NavigationState that has
- // |expected_url|, the normal page type, and the main document loaded.
- void RunUntilUrlEquals(const GURL& expected_url);
- // Calls RunUntilNavigationStateMatches with a NavigationState that has
- // |expected_title| and the normal page type.
- void RunUntilTitleEquals(const base::StringPiece expected_title);
- // Calls RunUntilNavigationStateMatches with a NavigationState that has
- // |expected_url|, |expected_title|, and the normal page type.
- void RunUntilUrlAndTitleEquals(const GURL& expected_url,
- base::StringPiece expected_title);
- // Calls RunUntilNavigationStateMatches with a NavigationState that has
- // the error page type, |expected_title|, and the main document loaded.
- void RunUntilErrorPageIsLoadedAndTitleEquals(
- base::StringPiece expected_title);
- // Calls RunUntilNavigationStateMatches with a NavigationState that has
- // all the expected fields and the normal page type.
- void RunUntilUrlTitleBackForwardEquals(const GURL& expected_url,
- base::StringPiece expected_title,
- bool expected_can_go_back,
- bool expected_can_go_forward);
- // Returns the title.
- std::string title() { return current_state_.title(); }
- // Returns the current navigation state.
- fuchsia::web::NavigationState* current_state() { return ¤t_state_; }
- // Returns the last received changes.
- fuchsia::web::NavigationState* last_changes() { return &last_changes_; }
- // 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:
- struct FailureReason {
- const char* field_name;
- std::string expected;
- };
- // fuchsia::web::NavigationEventListener implementation.
- void OnNavigationStateChanged(
- fuchsia::web::NavigationState change,
- OnNavigationStateChangedCallback callback) override;
- // Compare the current state with all fields of |expected_state_| that have
- // been set. Any expectation mismatches will be recorded in |failure_reasons|,
- // if set.
- bool AllFieldsMatch(std::vector<FailureReason>* failure_reasons);
- void QuitLoopIfAllFieldsMatch(
- base::RepeatingClosure quit_run_loop_closure,
- BeforeAckCallback before_ack_callback,
- const fuchsia::web::NavigationState& change,
- fuchsia::web::NavigationEventListener::OnNavigationStateChangedCallback
- ack_callback);
- fuchsia::web::NavigationState current_state_;
- fuchsia::web::NavigationState last_changes_;
- // Set for the duration of a call to RunUntilNavigationStateMatches().
- const fuchsia::web::NavigationState* expected_state_ = nullptr;
- BeforeAckCallback before_ack_;
- };
- #endif // FUCHSIA_WEB_COMMON_TEST_TEST_NAVIGATION_LISTENER_H_
|