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