web_state_observer_bridge.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // Copyright 2015 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 IOS_WEB_PUBLIC_WEB_STATE_OBSERVER_BRIDGE_H_
  5. #define IOS_WEB_PUBLIC_WEB_STATE_OBSERVER_BRIDGE_H_
  6. #import <Foundation/Foundation.h>
  7. #include <string>
  8. #include "ios/web/public/web_state_observer.h"
  9. namespace web {
  10. class NavigationContext;
  11. enum Permission : NSUInteger;
  12. }
  13. // Observes page lifecycle events from Objective-C. To use as a
  14. // web::WebStateObserver, wrap in a web::WebStateObserverBridge.
  15. @protocol CRWWebStateObserver <NSObject>
  16. @optional
  17. // Invoked by WebStateObserverBridge::WasShown.
  18. - (void)webStateWasShown:(web::WebState*)webState;
  19. // Invoked by WebStateObserverBridge::WasHidden.
  20. - (void)webStateWasHidden:(web::WebState*)webState;
  21. // Invoked by WebStateObserverBridge::DidStartNavigation.
  22. - (void)webState:(web::WebState*)webState
  23. didStartNavigation:(web::NavigationContext*)navigationContext;
  24. // Invoked by WebStateObserverBridge::DidRedirectNavigation.
  25. - (void)webState:(web::WebState*)webState
  26. didRedirectNavigation:(web::NavigationContext*)navigationContext;
  27. // Invoked by WebStateObserverBridge::DidFinishNavigation.
  28. - (void)webState:(web::WebState*)webState
  29. didFinishNavigation:(web::NavigationContext*)navigationContext;
  30. // Invoked by WebStateObserverBridge::DidStartLoading.
  31. - (void)webStateDidStartLoading:(web::WebState*)webState;
  32. // Invoked by WebStateObserverBridge::DidStopLoading.
  33. - (void)webStateDidStopLoading:(web::WebState*)webState;
  34. // Invoked by WebStateObserverBridge::PageLoaded.
  35. - (void)webState:(web::WebState*)webState didLoadPageWithSuccess:(BOOL)success;
  36. // Invoked by WebStateObserverBridge::LoadProgressChanged.
  37. - (void)webState:(web::WebState*)webState
  38. didChangeLoadingProgress:(double)progress;
  39. // Invoked by WebStateObserverBridge::DidChangeBackForwardState.
  40. - (void)webStateDidChangeBackForwardState:(web::WebState*)webState;
  41. // Invoked by WebStateObserverBridge::TitleWasSet.
  42. - (void)webStateDidChangeTitle:(web::WebState*)webState;
  43. // Invoked by WebStateObserverBridge::DidChangeVisibleSecurityState.
  44. - (void)webStateDidChangeVisibleSecurityState:(web::WebState*)webState;
  45. // Invoked by WebStateObserverBridge::FaviconUrlUpdated.
  46. - (void)webState:(web::WebState*)webState
  47. didUpdateFaviconURLCandidates:
  48. (const std::vector<web::FaviconURL>&)candidates;
  49. // Invoked by WebStateObserverBridge::PermissionStateChanged.
  50. - (void)webState:(web::WebState*)webState
  51. didChangeStateForPermission:(web::Permission)permission
  52. API_AVAILABLE(ios(15.0));
  53. // Invoked by WebStateObserverBridge::WebFrameDidBecomeAvailable.
  54. - (void)webState:(web::WebState*)webState
  55. frameDidBecomeAvailable:(web::WebFrame*)webFrame;
  56. // Invoked by WebStateObserverBridge::WebFrameWillBecomeUnavailable.
  57. - (void)webState:(web::WebState*)webState
  58. frameWillBecomeUnavailable:(web::WebFrame*)webFrame;
  59. // Invoked by WebStateObserverBridge::RenderProcessGone.
  60. - (void)renderProcessGoneForWebState:(web::WebState*)webState;
  61. // Invoked by WebStateObserverBridge::WebStateRealized.
  62. - (void)webStateRealized:(web::WebState*)webState;
  63. // Note: after |webStateDestroyed:| is invoked, the WebState being observed
  64. // is no longer valid.
  65. - (void)webStateDestroyed:(web::WebState*)webState;
  66. @end
  67. namespace web {
  68. // Bridge to use an id<CRWWebStateObserver> as a web::WebStateObserver.
  69. class WebStateObserverBridge : public web::WebStateObserver {
  70. public:
  71. // It it the responsibility of calling code to add/remove the instance
  72. // from the WebStates observer lists.
  73. WebStateObserverBridge(id<CRWWebStateObserver> observer);
  74. WebStateObserverBridge(const WebStateObserverBridge&) = delete;
  75. WebStateObserverBridge& operator=(const WebStateObserverBridge&) = delete;
  76. ~WebStateObserverBridge() override;
  77. // web::WebStateObserver methods.
  78. void WasShown(web::WebState* web_state) override;
  79. void WasHidden(web::WebState* web_state) override;
  80. void DidStartNavigation(web::WebState* web_state,
  81. NavigationContext* navigation_context) override;
  82. void DidRedirectNavigation(
  83. web::WebState* web_state,
  84. web::NavigationContext* navigation_context) override;
  85. void DidFinishNavigation(web::WebState* web_state,
  86. NavigationContext* navigation_context) override;
  87. void DidStartLoading(web::WebState* web_state) override;
  88. void DidStopLoading(web::WebState* web_state) override;
  89. void PageLoaded(
  90. web::WebState* web_state,
  91. web::PageLoadCompletionStatus load_completion_status) override;
  92. void LoadProgressChanged(web::WebState* web_state, double progress) override;
  93. void DidChangeBackForwardState(web::WebState* web_state) override;
  94. void TitleWasSet(web::WebState* web_state) override;
  95. void DidChangeVisibleSecurityState(web::WebState* web_state) override;
  96. void FaviconUrlUpdated(web::WebState* web_state,
  97. const std::vector<FaviconURL>& candidates) override;
  98. void PermissionStateChanged(web::WebState* web_state,
  99. web::Permission permission) override
  100. API_AVAILABLE(ios(15.0));
  101. void WebFrameDidBecomeAvailable(WebState* web_state,
  102. WebFrame* web_frame) override;
  103. void WebFrameWillBecomeUnavailable(WebState* web_state,
  104. WebFrame* web_frame) override;
  105. void RenderProcessGone(web::WebState* web_state) override;
  106. void WebStateRealized(web::WebState* web_state) override;
  107. void WebStateDestroyed(web::WebState* web_state) override;
  108. private:
  109. __weak id<CRWWebStateObserver> observer_ = nil;
  110. };
  111. } // namespace web
  112. #endif // IOS_WEB_PUBLIC_WEB_STATE_OBSERVER_BRIDGE_H_