blob: 639b5e15f6d710b2d158a9f0c1b1e4f900779064 [file] [log] [blame]
// Copyright 2012 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_CHROME_BROWSER_UI_STATIC_CONTENT_STATIC_HTML_VIEW_CONTROLLER_H_
#define IOS_CHROME_BROWSER_UI_STATIC_CONTENT_STATIC_HTML_VIEW_CONTROLLER_H_
#import <UIKit/UIKit.h>
#import <WebKit/WebKit.h>
#import "ios/chrome/browser/ui/url_loader.h"
#import "ios/web/public/block_types.h"
@protocol CRWNativeContentDelegate;
namespace web {
class BrowserState;
struct Referrer;
}
// Callback for the HtmlGenerator protocol.
typedef void (^HtmlCallback)(NSString*);
// An object that can generate HTML to be displayed.
@protocol HtmlGenerator<NSObject>
// Generates the HTML to be displayed. This is called on the main thread. If
// heavy work must be done, it should be done asynchronously.
- (void)generateHtml:(HtmlCallback)callback;
@end
// HtmlGenerator that get HTML from a IDR_ id.
@interface IdrHtmlGenerator : NSObject<HtmlGenerator> {
@private
// The IDR_ constant.
int resourceId_;
// The encoding of the resource.
NSStringEncoding encoding_;
}
// Init with the IDR_ constant that point to a UTF8 string.
- (id)initWithResourceId:(int)resourceId;
// Init with the IDR_ constant that point to a string with the given encoding.
- (id)initWithResourceId:(int)resourceId encoding:(NSStringEncoding)encoding;
@end
// Displays html pages either located in the application bundle, the application
// data directory, or obtained by a |HtmlGenerator|.
@interface StaticHtmlViewController : NSObject
// The web view that is displaying the content. It is lazily created.
@property(nonatomic, readonly, weak) WKWebView* webView;
// Returns the web controller scrollview.
- (UIScrollView*)scrollView;
// Initialization method. |resource| is the location of the static page to
// display, relative to the root of the application bundle. |browserState| is
// the user browser state to use for loading resources and must not be null.
- (instancetype)initWithResource:(NSString*)resource
browserState:(web::BrowserState*)browserState;
// Initialization method. |generator| will produce the html to display. Its
// generation method will be called each time reload is called. |browserState|
// is the user browser state to use for loading resources and must not be null.
// |StaticHtmlViewController| retains |generator|.
- (instancetype)initWithGenerator:(id<HtmlGenerator>)generator
browserState:(web::BrowserState*)browserState;
// Initialization method. |fileURL| is the location of the page in the
// application data directory. |resourcesRoot| is the root directory where the
// page pointed by |fileURL| can find its resources. Web view will get read
// access to the |resourcesRoot| directory. |fileURL| must be contained in
// |resourcesRoot|. |browserState| is the user browser state to use for
// loading resources and must not be null.
- (instancetype)initWithFileURL:(const GURL&)fileURL
allowingReadAccessToURL:(const GURL&)resourcesRoot
browserState:(web::BrowserState*)browserState;
// Set the |loader| to use to allow navigation to external URL. The |referrer|
// is the URL that will be used as referrer for those navigations.
- (void)setLoader:(id<UrlLoader>)loader referrer:(const web::Referrer&)referrer;
// Asynchronously executes the supplied JavaScript. Calls |completionHandler|
// with results of the execution. If the controller cannot execute JS at the
// moment, |completionHandler| is called with an NSError. The
// |completionHandler| can be nil.
- (void)executeJavaScript:(NSString*)script
completionHandler:(web::JavaScriptResultBlock)completionHandler;
// The web page title. Will return nil if not available.
- (NSString*)title;
// Reload the content of the web page.
- (void)reload;
// Causes the page to start loading immediately if there is a pending load;
// normally if the web view has been paged out for memory reasons, loads are
// started lazily the next time the view is displayed. This can be called to
// bypass the lazy behavior. This is equivalent to calling -webView, but should
// be used when deliberately pre-triggering a load without displaying.
- (void)triggerPendingLoad;
// Called when memory is low. Release anything (such as views) that can be
// easily re-created to free up RAM.
- (void)handleLowMemory;
// Returns YES if there is currently a live view in the tab (e.g., the view
// hasn't been discarded due to low memory).
// NOTE: This should be used for metrics-gathering only; for any other purpose
// callers should not know or care whether the view is live.
- (BOOL)isViewAlive;
// Set a |CRWNativeContentDelegate| that will be notified each time the title of
// the page changes.
- (void)setDelegate:(id<CRWNativeContentDelegate>)delegate;
// Enables or disables the scrolling in the native view.
- (void)setScrollEnabled:(BOOL)enabled;
@end
#endif // IOS_CHROME_BROWSER_UI_STATIC_CONTENT_STATIC_HTML_VIEW_CONTROLLER_H_