Chromium Code Reviews| Index: ios/chrome/browser/web/error_page_content.mm |
| diff --git a/ios/chrome/browser/web/error_page_content.mm b/ios/chrome/browser/web/error_page_content.mm |
| index fbd846d316c1c82a740d820beddd0463048d2cf7..f536aefc0568b1b50f49acfeb8dadc547d657ac3 100644 |
| --- a/ios/chrome/browser/web/error_page_content.mm |
| +++ b/ios/chrome/browser/web/error_page_content.mm |
| @@ -20,6 +20,67 @@ |
| #include "ui/base/webui/jstemplate_builder.h" |
| #include "url/gurl.h" |
| +@interface ErrorPageGenerator : NSObject<HtmlGenerator> |
| +- (instancetype)initWithError:(NSError*)error |
| + isPost:(BOOL)isPost |
| + isIncognito:(BOOL)isIncognito NS_DESIGNATED_INITIALIZER; |
| + |
| +- (instancetype)init NS_UNAVAILABLE; |
| +@end |
| + |
| +@implementation ErrorPageGenerator { |
| + // Stores the HTML generated from the NSError in the initializer. |
| + base::scoped_nsobject<NSString> html_; |
| +} |
| + |
| +- (instancetype)initWithError:(NSError*)error |
| + isPost:(BOOL)isPost |
| + isIncognito:(BOOL)isIncognito { |
| + self = [super init]; |
| + if (self) { |
| + NSString* badURLString = |
| + [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]; |
| + NSError* originalError = base::ios::GetFinalUnderlyingErrorFromError(error); |
| + NSString* errorDomain = nil; |
| + int errorCode = 0; |
| + |
| + if (originalError) { |
| + errorDomain = [originalError domain]; |
| + errorCode = [originalError code]; |
| + } else { |
| + errorDomain = [error domain]; |
| + errorCode = [error code]; |
| + } |
| + DCHECK(errorCode != 0); |
| + |
| + base::DictionaryValue errorStrings; |
| + error_page::LocalizedError::GetStrings( |
| + errorCode, base::SysNSStringToUTF8(errorDomain), |
| + GURL(base::SysNSStringToUTF16(badURLString)), isPost, false, false, |
| + isIncognito, GetApplicationContext()->GetApplicationLocale(), nullptr, |
| + &errorStrings); |
| + |
| + ui::ScaleFactor scaleFactor = |
| + ResourceBundle::GetSharedInstance().GetMaxScaleFactor(); |
| + |
| + const base::StringPiece templateHTML( |
| + ResourceBundle::GetSharedInstance().GetRawDataResourceForScale( |
| + IDR_NET_ERROR_HTML, scaleFactor)); |
| + if (templateHTML.empty()) |
| + NOTREACHED() << "unable to load template. ID: " << IDR_NET_ERROR_HTML; |
| + std::string errorHTML = webui::GetTemplatesHtml( |
| + templateHTML, &errorStrings, "t" /* IDR_NET_ERROR_HTML root id */); |
| + html_.reset([base::SysUTF8ToNSString(errorHTML) retain]); |
| + } |
| + return self; |
| +} |
| + |
| +- (void)generateHtml:(HtmlCallback)callback { |
| + callback(html_.get()); |
| +} |
| + |
| +@end |
|
stkhapugin
2017/02/17 13:12:44
nit: Please add a #pragma mark - ErrorPageContent,
Olivier
2017/02/17 13:58:39
Done.
|
| + |
| @implementation ErrorPageContent |
| #pragma mark - |
| @@ -36,52 +97,19 @@ |
| rendererInitiated:YES]; |
| } |
| -- (void)generateHtml:(HtmlCallback)callback { |
| - callback(html_.get()); |
| -} |
| - |
| - (id)initWithLoader:(id<UrlLoader>)loader |
| browserState:(web::BrowserState*)browserState |
| url:(const GURL&)url |
| error:(NSError*)error |
| isPost:(BOOL)isPost |
| isIncognito:(BOOL)isIncognito { |
| - NSString* badURLString = |
| - [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]; |
| - NSError* originalError = base::ios::GetFinalUnderlyingErrorFromError(error); |
| - NSString* errorDomain = nil; |
| - int errorCode = 0; |
| - |
| - if (originalError) { |
| - errorDomain = [originalError domain]; |
| - errorCode = [originalError code]; |
| - } else { |
| - errorDomain = [error domain]; |
| - errorCode = [error code]; |
| - } |
| - DCHECK(errorCode != 0); |
| - |
| - base::DictionaryValue errorStrings; |
| - error_page::LocalizedError::GetStrings( |
| - errorCode, base::SysNSStringToUTF8(errorDomain), |
| - GURL(base::SysNSStringToUTF16(badURLString)), isPost, false, false, |
| - isIncognito, GetApplicationContext()->GetApplicationLocale(), nullptr, |
| - &errorStrings); |
| - |
| - ui::ScaleFactor scaleFactor = |
| - ResourceBundle::GetSharedInstance().GetMaxScaleFactor(); |
| - |
| - const base::StringPiece templateHTML( |
| - ResourceBundle::GetSharedInstance().GetRawDataResourceForScale( |
| - IDR_NET_ERROR_HTML, scaleFactor)); |
| - if (templateHTML.empty()) |
| - NOTREACHED() << "unable to load template. ID: " << IDR_NET_ERROR_HTML; |
| - std::string errorHTML = webui::GetTemplatesHtml( |
| - templateHTML, &errorStrings, "t" /* IDR_NET_ERROR_HTML root id */); |
| - html_.reset([base::SysUTF8ToNSString(errorHTML) retain]); |
| + ErrorPageGenerator* generator = |
| + [[[ErrorPageGenerator alloc] initWithError:error |
| + isPost:isPost |
| + isIncognito:isIncognito] autorelease]; |
| base::scoped_nsobject<StaticHtmlViewController> HTMLViewController( |
| - [[StaticHtmlViewController alloc] initWithGenerator:self |
| + [[StaticHtmlViewController alloc] initWithGenerator:generator |
| browserState:browserState]); |
| return [super initWithLoader:loader |
| staticHTMLViewController:HTMLViewController |