error_page_helper.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef WEBLAYER_RENDERER_ERROR_PAGE_HELPER_H_
  5. #define WEBLAYER_RENDERER_ERROR_PAGE_HELPER_H_
  6. #include "content/public/renderer/render_frame_observer.h"
  7. #include "content/public/renderer/render_frame_observer_tracker.h"
  8. #include "mojo/public/cpp/bindings/associated_receiver.h"
  9. #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
  10. #include "weblayer/common/error_page_helper.mojom.h"
  11. namespace weblayer {
  12. // A class that allows error pages to handle user interaction by handling their
  13. // javascript commands. Currently only SSL and safebrowsing related
  14. // interstitials are supported.
  15. // This is a stripped down version of Chrome's NetErrorHelper.
  16. // TODO(crbug.com/1073624): Share this logic with NetErrorHelper.
  17. class ErrorPageHelper
  18. : public content::RenderFrameObserver,
  19. public content::RenderFrameObserverTracker<ErrorPageHelper>,
  20. public mojom::ErrorPageHelper {
  21. public:
  22. ErrorPageHelper(const ErrorPageHelper&) = delete;
  23. ErrorPageHelper& operator=(const ErrorPageHelper&) = delete;
  24. // Creates an ErrorPageHelper which will observe and tie its lifetime to
  25. // |render_frame|, if it's a main frame. ErrorPageHelpers will not be created
  26. // for sub frames.
  27. static void Create(content::RenderFrame* render_frame);
  28. // Returns the ErrorPageHelper for the frame, if it exists.
  29. static ErrorPageHelper* GetForFrame(content::RenderFrame* render_frame);
  30. // Called when the current navigation results in an error.
  31. void PrepareErrorPage();
  32. // content::RenderFrameObserver:
  33. void DidCommitProvisionalLoad(ui::PageTransition transition) override;
  34. void DidFinishLoad() override;
  35. void OnDestruct() override;
  36. // mojom::ErrorPageHelper:
  37. void DisableErrorPageHelperForNextError() override;
  38. private:
  39. explicit ErrorPageHelper(content::RenderFrame* render_frame);
  40. ~ErrorPageHelper() override;
  41. void BindErrorPageHelper(
  42. mojo::PendingAssociatedReceiver<mojom::ErrorPageHelper> receiver);
  43. // Set to true in PrepareErrorPage().
  44. bool is_preparing_for_error_page_ = false;
  45. // Set to the value of |is_preparing_for_error_page_| in
  46. // DidCommitProvisionalLoad(). Used to determine if the security interstitial
  47. // should be shown when the load finishes.
  48. bool show_error_page_in_finish_load_ = false;
  49. // Set to true when the embedder injects its own error page. When the
  50. // embedder injects its own error page the support here is not needed and
  51. // disabled.
  52. bool is_disabled_for_next_error_ = false;
  53. mojo::AssociatedReceiver<mojom::ErrorPageHelper> error_page_helper_receiver_{
  54. this};
  55. base::WeakPtrFactory<ErrorPageHelper> weak_factory_{this};
  56. };
  57. } // namespace weblayer
  58. #endif // WEBLAYER_RENDERER_ERROR_PAGE_HELPER_H_