#ifndef WEBLAYER_RENDERER_ERROR_PAGE_HELPER_H_
#define WEBLAYER_RENDERER_ERROR_PAGE_HELPER_H_
#include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_frame_observer_tracker.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "weblayer/common/error_page_helper.mojom.h"
namespace weblayer {
class ErrorPageHelper
: public content::RenderFrameObserver,
public content::RenderFrameObserverTracker<ErrorPageHelper>,
public mojom::ErrorPageHelper {
public:
ErrorPageHelper(const ErrorPageHelper&) = delete;
ErrorPageHelper& operator=(const ErrorPageHelper&) = delete;
static void Create(content::RenderFrame* render_frame);
static ErrorPageHelper* GetForFrame(content::RenderFrame* render_frame);
void PrepareErrorPage();
void DidCommitProvisionalLoad(ui::PageTransition transition) override;
void DidFinishLoad() override;
void OnDestruct() override;
void DisableErrorPageHelperForNextError() override;
private:
explicit ErrorPageHelper(content::RenderFrame* render_frame);
~ErrorPageHelper() override;
void BindErrorPageHelper(
mojo::PendingAssociatedReceiver<mojom::ErrorPageHelper> receiver);
bool is_preparing_for_error_page_ = false;
bool show_error_page_in_finish_load_ = false;
bool is_disabled_for_next_error_ = false;
mojo::AssociatedReceiver<mojom::ErrorPageHelper> error_page_helper_receiver_{
this};
base::WeakPtrFactory<ErrorPageHelper> weak_factory_{this};
};
}
#endif