Index: ios/chrome/browser/ui/page_not_available_controller.mm |
diff --git a/ios/chrome/browser/ui/page_not_available_controller.mm b/ios/chrome/browser/ui/page_not_available_controller.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b655777baa0a726729aa3b503770e527e2d5cb01 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/page_not_available_controller.mm |
@@ -0,0 +1,130 @@ |
+// 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. |
+ |
+#import "ios/chrome/browser/ui/page_not_available_controller.h" |
+ |
+#include "base/i18n/rtl.h" |
+#include "base/logging.h" |
+#include "base/mac/objc_property_releaser.h" |
+#include "base/mac/scoped_nsobject.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "components/strings/grit/components_strings.h" |
+#include "components/url_formatter/url_formatter.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/l10n/l10n_util_mac.h" |
+ |
+namespace { |
+// Top padding for |self.titleLabel|. |
+const CGFloat kTitleLabelTopPadding = 20.0; |
+// Height for |self.titleLabel|. |
+const CGFloat kTitleLabelHeight = 38.0; |
+// Top padding for |self.descriptionView|. |
+const CGFloat kDescriptionViewTopPadding = 66.0; |
+// Bottom padding for |self.descriptionView|. |
+const CGFloat kDescriptionViewBottomPadding = 20.0; |
+// Horizontal padding between subviews and |self.view|. |
+const CGFloat kHorizontalPadding = 20.0; |
+// Font size for |self.titleLabel|. |
+const CGFloat kTitleLabelFontSize = 18.0; |
+// Font size for |self.descriptionView|. |
+const CGFloat kDescriptionViewFontSize = 17.0; |
+} |
+ |
+@interface PageNotAvailableController () { |
+ base::mac::ObjCPropertyReleaser _propertyReleaser_PageNotAvailableController; |
+} |
+ |
+// The title label displayed centered at the top of the screen. |
+@property(nonatomic, retain) UILabel* titleLabel; |
+ |
+// TextView containing a detailed description of the problem. |
+@property(nonatomic, retain) UITextView* descriptionView; |
+ |
+@end |
+ |
+@implementation PageNotAvailableController |
+ |
+@synthesize titleLabel = _titleLabel; |
+@synthesize descriptionView = _descriptionView; |
+@synthesize descriptionText = _descriptionText; |
+ |
+- (instancetype)initWithUrl:(const GURL&)url { |
+ self = [super initWithNibName:nil url:url]; |
+ if (self) { |
+ _propertyReleaser_PageNotAvailableController.Init( |
+ self, [PageNotAvailableController class]); |
+ |
+ // Use the host as the page title, unless the URL has a custom scheme. |
+ if (self.url.SchemeIsHTTPOrHTTPS()) { |
+ self.title = base::SysUTF16ToNSString( |
+ url_formatter::IDNToUnicode(self.url.host())); |
+ } else { |
+ base::string16 formattedURL = url_formatter::FormatUrl( |
+ self.url, url_formatter::kFormatUrlOmitNothing, |
+ net::UnescapeRule::NORMAL, nullptr, nullptr, nullptr); |
+ if (base::i18n::IsRTL()) { |
+ base::i18n::WrapStringWithLTRFormatting(&formattedURL); |
+ } |
+ self.title = base::SysUTF16ToNSString(formattedURL); |
+ } |
+ |
+ // |self.view| setup. |
+ CGRect windowBounds = [UIApplication sharedApplication].keyWindow.bounds; |
+ base::scoped_nsobject<UIView> view( |
+ [[UIView alloc] initWithFrame:windowBounds]); |
+ [view setBackgroundColor:[UIColor whiteColor]]; |
+ [view setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | |
+ UIViewAutoresizingFlexibleHeight)]; |
+ self.view = view; |
+ |
+ // |self.titleLabel| setup. |
+ CGRect titleLabelFrame = windowBounds; |
+ titleLabelFrame.origin.x += kHorizontalPadding; |
+ titleLabelFrame.size.width -= 2.0 * kHorizontalPadding; |
+ titleLabelFrame.origin.y += kTitleLabelTopPadding; |
+ titleLabelFrame.size.height = kTitleLabelHeight; |
+ _titleLabel = [[UILabel alloc] initWithFrame:titleLabelFrame]; |
+ _titleLabel.text = |
+ l10n_util::GetNSString(IDS_ERRORPAGES_HEADING_NOT_AVAILABLE); |
+ _titleLabel.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | |
+ UIViewAutoresizingFlexibleWidth); |
+ _titleLabel.font = |
+ [UIFont fontWithName:@"Helvetica-Bold" size:kTitleLabelFontSize]; |
+ _titleLabel.textAlignment = NSTextAlignmentCenter; |
+ [self.view addSubview:_titleLabel]; |
+ |
+ // |self.descriptionView| setup. |
+ CGRect descriptionViewFrame = windowBounds; |
+ descriptionViewFrame.origin.x += kHorizontalPadding; |
+ descriptionViewFrame.size.width -= 2 * kHorizontalPadding; |
+ descriptionViewFrame.origin.y = kDescriptionViewTopPadding; |
+ descriptionViewFrame.size.height = CGRectGetHeight(windowBounds) - |
+ descriptionViewFrame.origin.y - |
+ kDescriptionViewBottomPadding; |
+ _descriptionView = [[UITextView alloc] initWithFrame:descriptionViewFrame]; |
+ _descriptionView.text = l10n_util::GetNSStringF( |
+ IDS_ERRORPAGES_SUMMARY_NOT_AVAILABLE_NO_EMPHASIS, |
+ base::UTF8ToUTF16(self.url.spec())); |
+ _descriptionView.autoresizingMask = |
+ UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; |
+ _descriptionView.font = [UIFont systemFontOfSize:kDescriptionViewFontSize]; |
+ _descriptionView.editable = NO; |
+ [self.view addSubview:_descriptionView]; |
+ } |
+ return self; |
+} |
+ |
+- (instancetype)initWithNibName:(NSString*)nibName |
+ url:(const GURL&)url NS_UNAVAILABLE { |
+ NOTREACHED(); |
+ return nil; |
+} |
+ |
+- (void)setDescriptionText:(NSString*)descriptionText { |
+ _descriptionText = descriptionText; |
+ _descriptionView.text = descriptionText; |
+} |
+ |
+@end |