| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/web/public/web_state_observer_bridge.h" |
| |
| namespace web { |
| |
| enum Permission : NSUInteger; |
| |
| WebStateObserverBridge::WebStateObserverBridge(id<CRWWebStateObserver> observer) |
| : observer_(observer) {} |
| |
| WebStateObserverBridge::~WebStateObserverBridge() = default; |
| |
| void WebStateObserverBridge::WasShown(web::WebState* web_state) { |
| if ([observer_ respondsToSelector:@selector(webStateWasShown:)]) { |
| [observer_ webStateWasShown:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::WasHidden(web::WebState* web_state) { |
| if ([observer_ respondsToSelector:@selector(webStateWasHidden:)]) { |
| [observer_ webStateWasHidden:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::DidStartNavigation( |
| web::WebState* web_state, |
| web::NavigationContext* navigation_context) { |
| if ([observer_ respondsToSelector:@selector(webState:didStartNavigation:)]) { |
| [observer_ webState:web_state didStartNavigation:navigation_context]; |
| } |
| } |
| |
| void WebStateObserverBridge::DidRedirectNavigation( |
| web::WebState* web_state, |
| web::NavigationContext* navigation_context) { |
| SEL selector = @selector(webState:didRedirectNavigation:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webState:web_state didRedirectNavigation:navigation_context]; |
| } |
| } |
| |
| void WebStateObserverBridge::DidFinishNavigation( |
| web::WebState* web_state, |
| web::NavigationContext* navigation_context) { |
| if ([observer_ respondsToSelector:@selector(webState:didFinishNavigation:)]) { |
| [observer_ webState:web_state didFinishNavigation:navigation_context]; |
| } |
| } |
| |
| void WebStateObserverBridge::DidStartLoading(web::WebState* web_state) { |
| SEL selector = @selector(webStateDidStartLoading:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webStateDidStartLoading:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::DidStopLoading(web::WebState* web_state) { |
| SEL selector = @selector(webStateDidStopLoading:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webStateDidStopLoading:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::PageLoaded( |
| web::WebState* web_state, |
| web::PageLoadCompletionStatus load_completion_status) { |
| SEL selector = @selector(webState:didLoadPageWithSuccess:); |
| if ([observer_ respondsToSelector:selector]) { |
| BOOL success = NO; |
| switch (load_completion_status) { |
| case PageLoadCompletionStatus::SUCCESS: |
| success = YES; |
| break; |
| case PageLoadCompletionStatus::FAILURE: |
| success = NO; |
| break; |
| } |
| [observer_ webState:web_state didLoadPageWithSuccess:success]; |
| } |
| } |
| |
| void WebStateObserverBridge::LoadProgressChanged(web::WebState* web_state, |
| double progress) { |
| SEL selector = @selector(webState:didChangeLoadingProgress:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webState:web_state didChangeLoadingProgress:progress]; |
| } |
| } |
| |
| void WebStateObserverBridge::DidChangeBackForwardState( |
| web::WebState* web_state) { |
| SEL selector = @selector(webStateDidChangeBackForwardState:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webStateDidChangeBackForwardState:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::TitleWasSet(web::WebState* web_state) { |
| if ([observer_ respondsToSelector:@selector(webStateDidChangeTitle:)]) { |
| [observer_ webStateDidChangeTitle:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::DidChangeVisibleSecurityState( |
| web::WebState* web_state) { |
| SEL selector = @selector(webStateDidChangeVisibleSecurityState:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webStateDidChangeVisibleSecurityState:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::FaviconUrlUpdated( |
| web::WebState* web_state, |
| const std::vector<FaviconURL>& candidates) { |
| SEL selector = @selector(webState:didUpdateFaviconURLCandidates:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webState:web_state didUpdateFaviconURLCandidates:candidates]; |
| } |
| } |
| |
| void WebStateObserverBridge::PermissionStateChanged( |
| web::WebState* web_state, |
| web::Permission permission) { |
| SEL selector = @selector(webState:didChangeStateForPermission:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webState:web_state didChangeStateForPermission:permission]; |
| } |
| } |
| |
| void WebStateObserverBridge::UnderPageBackgroundColorChanged( |
| web::WebState* web_state) { |
| SEL selector = @selector(webStateDidChangeUnderPageBackgroundColor:); |
| if ([observer_ respondsToSelector:selector]) { |
| [observer_ webStateDidChangeUnderPageBackgroundColor:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::RenderProcessGone(web::WebState* web_state) { |
| if ([observer_ respondsToSelector:@selector(renderProcessGoneForWebState:)]) { |
| [observer_ renderProcessGoneForWebState:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::WebStateRealized(web::WebState* web_state) { |
| if ([observer_ respondsToSelector:@selector(webStateRealized:)]) { |
| [observer_ webStateRealized:web_state]; |
| } |
| } |
| |
| void WebStateObserverBridge::WebStateDestroyed(web::WebState* web_state) { |
| SEL selector = @selector(webStateDestroyed:); |
| if ([observer_ respondsToSelector:selector]) { |
| // `webStateDestroyed:` may delete `this`, so don't expect `this` to be |
| // valid afterwards. |
| [observer_ webStateDestroyed:web_state]; |
| } |
| } |
| |
| } // namespace web |