blob: 65b2f9bab068f6b5bce6bbd25658113fa7ca3d75 [file] [log] [blame]
// Copyright 2022 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 CHROME_BROWSER_PASSWORD_MANAGER_PASSWORDS_NAVIGATION_OBSERVER_H_
#define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORDS_NAVIGATION_OBSERVER_H_
#include <string>
#include "base/run_loop.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents_observer.h"
class PasswordsNavigationObserver : public content::WebContentsObserver {
public:
explicit PasswordsNavigationObserver(content::WebContents* web_contents);
PasswordsNavigationObserver(const PasswordsNavigationObserver&) = delete;
PasswordsNavigationObserver& operator=(const PasswordsNavigationObserver&) =
delete;
~PasswordsNavigationObserver() override;
// Normally Wait() will not return until a main frame navigation occurs.
// If a path is set, Wait() will return after this path has been seen,
// regardless of the frame that navigated. Useful for multi-frame pages.
void SetPathToWaitFor(const std::string& path) { wait_for_path_ = path; }
// Normally Wait() will not return until a main frame navigation occurs.
// If quit_on_entry_committed is true Wait() will return on EntryCommitted.
void set_quit_on_entry_committed(bool quit_on_entry_committed) {
quit_on_entry_committed_ = quit_on_entry_committed;
}
// Wait for navigation to succeed.
void Wait();
// Returns the RenderFrameHost that navigated.
content::RenderFrameHost* render_frame_host() { return render_frame_host_; }
// content::WebContentsObserver:
void DidFinishNavigation(
content::NavigationHandle* navigation_handle) override;
void DidFinishLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url) override;
private:
std::string wait_for_path_;
raw_ptr<content::RenderFrameHost> render_frame_host_;
bool quit_on_entry_committed_ = false;
base::RunLoop run_loop_;
};
#endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORDS_NAVIGATION_OBSERVER_H_