chromium/ios/web/public/test/fakes/fake_web_state_observer.h

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_WEB_PUBLIC_TEST_FAKES_FAKE_WEB_STATE_OBSERVER_H_
#define IOS_WEB_PUBLIC_TEST_FAKES_FAKE_WEB_STATE_OBSERVER_H_

#import "base/memory/raw_ptr.h"
#include "ios/web/public/test/fakes/fake_web_state_observer_util.h"
#include "ios/web/public/web_state_observer.h"

namespace web {

class WebState;

// Test observer to check that the WebStateObserver methods are called as
// expected. Can only observe a single WebState.
// TODO(crbug.com/41350286): fix this to allow observing multiple WebStates.
class FakeWebStateObserver : public WebStateObserver {
 public:
  FakeWebStateObserver(WebState* web_state);
  ~FakeWebStateObserver() override;

  WebState* web_state() { return web_state_; }

  // Arguments passed to `WasShown`.
  web::TestWasShownInfo* was_shown_info() { return was_shown_info_.get(); }
  // Arguments passed to `WasHidden`.
  web::TestWasHiddenInfo* was_hidden_info() { return was_hidden_info_.get(); }
  // Arguments passed to `DidStartNavigation`.
  web::TestDidStartNavigationInfo* did_start_navigation_info() {
    return did_start_navigation_info_.get();
  }
  // Arguments passed to `DidFinishNavigation`.
  web::TestDidFinishNavigationInfo* did_finish_navigation_info() {
    return did_finish_navigation_info_.get();
  }
  // Arguments passed to `PageLoaded`.
  web::TestLoadPageInfo* load_page_info() { return load_page_info_.get(); }
  // Arguments passed to `LoadProgressChanged`.
  web::TestChangeLoadingProgressInfo* change_loading_progress_info() {
    return change_loading_progress_info_.get();
  }
  // Arguments passed to `TitleWasSet`.
  web::TestTitleWasSetInfo* title_was_set_info() {
    return title_was_set_info_.get();
  }
  // Arguments passed to `DidChangeVisibleSecurityState`.
  web::TestDidChangeVisibleSecurityStateInfo*
  did_change_visible_security_state_info() {
    return did_change_visible_security_state_info_.get();
  }
  // Arguments passed to `FaviconUrlUpdated`.
  web::TestUpdateFaviconUrlCandidatesInfo*
  update_favicon_url_candidates_info() {
    return update_favicon_url_candidates_info_.get();
  }
  // Arguments passed to `UnderPageBackgroundColorChanged`.
  web::TestUnderPageBackgroundColorChangedInfo*
  under_page_background_color_changed_info() {
    return under_page_background_color_changed_info_.get();
  }
  // Arguments passed to `RenderProcessGone`.
  web::TestRenderProcessGoneInfo* render_process_gone_info() {
    return render_process_gone_info_.get();
  }
  // Arguments passed to `WebStateDestroyed`.
  web::TestWebStateDestroyedInfo* web_state_destroyed_info() {
    return web_state_destroyed_info_.get();
  }
  // Arguments passed to `DidStartLoading`.
  web::TestStopLoadingInfo* stop_loading_info() {
    return stop_loading_info_.get();
  }
  // Arguments passed to `DidStopLoading`.
  web::TestStartLoadingInfo* start_loading_info() {
    return start_loading_info_.get();
  }

 private:
  // WebStateObserver implementation:
  void WasShown(WebState* web_state) override;
  void WasHidden(WebState* web_state) override;
  void PageLoaded(WebState* web_state,
                  PageLoadCompletionStatus load_completion_status) override;
  void LoadProgressChanged(WebState* web_state, double progress) override;
  void DidStartNavigation(WebState* web_state,
                          NavigationContext* context) override;
  void DidFinishNavigation(WebState* web_state,
                           NavigationContext* context) override;
  void TitleWasSet(WebState* web_state) override;
  void DidChangeVisibleSecurityState(WebState* web_state) override;
  void FaviconUrlUpdated(WebState* web_state,
                         const std::vector<FaviconURL>& candidates) override;
  void UnderPageBackgroundColorChanged(WebState* web_state) override;
  void RenderProcessGone(WebState* web_state) override;
  void WebStateDestroyed(WebState* web_state) override;
  void DidStartLoading(WebState* web_state) override;
  void DidStopLoading(WebState* web_state) override;

  // The WebState this instance is observing. Will be null after
  // WebStateDestroyed has been called.
  raw_ptr<web::WebState> web_state_ = nullptr;

  std::unique_ptr<web::TestWasShownInfo> was_shown_info_;
  std::unique_ptr<web::TestWasHiddenInfo> was_hidden_info_;
  std::unique_ptr<web::TestLoadPageInfo> load_page_info_;
  std::unique_ptr<web::TestChangeLoadingProgressInfo>
      change_loading_progress_info_;
  std::unique_ptr<web::TestDidStartNavigationInfo> did_start_navigation_info_;
  std::unique_ptr<web::TestDidFinishNavigationInfo> did_finish_navigation_info_;
  std::unique_ptr<web::TestTitleWasSetInfo> title_was_set_info_;
  std::unique_ptr<web::TestDidChangeVisibleSecurityStateInfo>
      did_change_visible_security_state_info_;
  std::unique_ptr<web::TestUpdateFaviconUrlCandidatesInfo>
      update_favicon_url_candidates_info_;
  std::unique_ptr<web::TestUnderPageBackgroundColorChangedInfo>
      under_page_background_color_changed_info_;
  std::unique_ptr<web::TestRenderProcessGoneInfo> render_process_gone_info_;
  std::unique_ptr<web::TestWebStateDestroyedInfo> web_state_destroyed_info_;
  std::unique_ptr<web::TestStartLoadingInfo> start_loading_info_;
  std::unique_ptr<web::TestStopLoadingInfo> stop_loading_info_;
};

}  // namespace web

#endif  // IOS_WEB_PUBLIC_TEST_FAKES_FAKE_WEB_STATE_OBSERVER_H_