// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_WEB_WEB_STATE_UI_CRW_WEB_VIEW_HANDLER_DELEGATE_H_
#define IOS_WEB_WEB_STATE_UI_CRW_WEB_VIEW_HANDLER_DELEGATE_H_

#import <Foundation/Foundation.h>

@class CRWWebViewHandler;
class GURL;
@class WKWebView;

namespace web {
class NavigationContextImpl;
class UserInteractionState;
class WebStateImpl;
}

// Delegate for the WebView handlers.
@protocol CRWWebViewHandlerDelegate

// The web state.
- (web::WebStateImpl*)webStateImplForWebViewHandler:(CRWWebViewHandler*)handler;

// The actual URL of the document object.
- (const GURL&)documentURLForWebViewHandler:(CRWWebViewHandler*)handler;

// Asks the delegate for the associated |UserInteractionState|.
- (web::UserInteractionState*)userInteractionStateForWebViewHandler:
    (CRWWebViewHandler*)handler;

// Notifies the delegate that the navigation has finished. Navigation is
// considered complete when the document has finished loading, or when other
// page load mechanics are completed on a non-document-changing URL change.
- (void)webViewHandler:(CRWWebViewHandler*)handler
    didFinishNavigation:(web::NavigationContextImpl*)context;

// Notifies the delegate that the SSL status of the web view changed.
- (void)webViewHandlerUpdateSSLStatusForCurrentNavigationItem:
    (CRWWebViewHandler*)handler;

// The delegate will create a web view if it's not yet created.
- (void)ensureWebViewCreatedForWebViewHandler:(CRWWebViewHandler*)handler;

// Returns the web view.
- (WKWebView*)webViewForWebViewHandler:(CRWWebViewHandler*)handler;

@end

#endif  // IOS_WEB_WEB_STATE_UI_CRW_WEB_VIEW_HANDLER_DELEGATE_H_
