Index: ios/web/webui/crw_web_ui_page_builder.h |
diff --git a/ios/web/webui/crw_web_ui_page_builder.h b/ios/web/webui/crw_web_ui_page_builder.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fb63c259001b75616e3e5518e7457d5b9ff0dc79 |
--- /dev/null |
+++ b/ios/web/webui/crw_web_ui_page_builder.h |
@@ -0,0 +1,59 @@ |
+// Copyright 2015 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_WEBUI_CRW_WEB_UI_PAGE_BUILDER_H_ |
+#define IOS_WEB_WEBUI_CRW_WEB_UI_PAGE_BUILDER_H_ |
+ |
+#import <Foundation/Foundation.h> |
+ |
+#include "url/gurl.h" |
+ |
+namespace web { |
+// Block type for WebUI page build completion callback. |
+typedef void (^WebUIPageCompletion)(NSString*); |
+// Block type for WebUI page builder delegate completion callback. |
+typedef void (^WebUIDelegateCompletion)(NSString*, const GURL&); |
+} // namespace web |
+ |
+@class CRWWebUIPageBuilder; |
+ |
+// Delegate for CRWWebUIPageBuilder. Handles resource retrieval. |
+@protocol CRWWebUIPageBuilderDelegate<NSObject> |
+// Fetches resource for resourceURL and invokes completionHandler with the |
+// result. |
+- (void)webUIPageBuilder:(CRWWebUIPageBuilder*)webUIPageBuilder |
+ fetchResourceWithURL:(const GURL&)resourceURL |
+ completionHandler:(web::WebUIDelegateCompletion)completionHandler; |
+@end |
+ |
+// Class for requesting and building WebUI HTML pages. Due to limitations on |
+// custom network protocols for WKWebView, it is not possible to directly load |
+// WebUI in WKWebView via the network stack. Instead, WebUI resources are |
+// manually fetched from the network stack and then flattened and loaded into |
+// the web view. |
+// |
+// To flatten the WebUI resources, tags for JS and CSS resources are replaced |
+// with retrieved resources. For example, if a WebUI HTML resource looks like: |
+// <html> |
+// <script src='chrome://javascript.js></script> |
+// <link rel="stylesheet" href="chrome://stylesheet.css"> |
+// </html> |
+// the flattened version would look like: |
+// <html> |
+// <script>[Content of chrome://javascript.js]</script> |
+// <style>[Content of chrome://stylesheet.css]</style> |
+// </html> |
+@interface CRWWebUIPageBuilder : NSObject |
+ |
+// Designated initializer. |
+- (instancetype)initWithDelegate:(id<CRWWebUIPageBuilderDelegate>)delegate; |
+ |
+// Builds and flattens page for webUIURL, and invokes completionHandler with the |
+// result. |
+- (void)buildWebUIPageForURL:(const GURL&)webUIURL |
+ completionHandler:(web::WebUIPageCompletion)completionHandler; |
+ |
+@end |
+ |
+#endif // IOS_WEB_WEBUI_CRW_WEB_UI_PAGE_BUILDER_H_ |