OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "ios/chrome/browser/web/resubmit_data_controller.h" | 5 #import "ios/chrome/browser/web/resubmit_data_controller.h" |
6 | 6 |
7 #import "base/logging.h" | 7 #import "base/logging.h" |
8 #include "base/mac/scoped_block.h" | |
9 #import "base/mac/scoped_nsobject.h" | |
10 #include "components/strings/grit/components_strings.h" | 8 #include "components/strings/grit/components_strings.h" |
11 #include "ui/base/l10n/l10n_util.h" | 9 #include "ui/base/l10n/l10n_util.h" |
12 | 10 |
11 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
12 #error "This file requires ARC support." | |
13 #endif | |
14 | |
13 @interface ResubmitDataController () { | 15 @interface ResubmitDataController () { |
14 base::scoped_nsobject<UIAlertController> _alertController; | 16 UIAlertController* _alertController; |
15 } | 17 } |
16 @end | 18 @end |
17 | 19 |
18 @implementation ResubmitDataController | 20 @implementation ResubmitDataController |
19 | 21 |
20 - (instancetype)init { | 22 - (instancetype)init { |
21 NOTREACHED(); | 23 NOTREACHED(); |
22 return nil; | 24 return nil; |
23 } | 25 } |
24 | 26 |
25 - (instancetype)initWithContinueBlock:(ProceduralBlock)continueBlock | 27 - (instancetype)initWithContinueBlock:(ProceduralBlock)continueBlock |
26 cancelBlock:(ProceduralBlock)cancelBlock { | 28 cancelBlock:(ProceduralBlock)cancelBlock { |
27 DCHECK(continueBlock); | 29 DCHECK(continueBlock); |
28 DCHECK(cancelBlock); | 30 DCHECK(cancelBlock); |
29 self = [super init]; | 31 self = [super init]; |
30 if (self) { | 32 if (self) { |
31 NSString* message = [NSString | 33 NSString* message = [NSString |
32 stringWithFormat:@"%@\n\n%@", | 34 stringWithFormat:@"%@\n\n%@", |
33 l10n_util::GetNSString(IDS_HTTP_POST_WARNING_TITLE), | 35 l10n_util::GetNSString(IDS_HTTP_POST_WARNING_TITLE), |
34 l10n_util::GetNSString(IDS_HTTP_POST_WARNING)]; | 36 l10n_util::GetNSString(IDS_HTTP_POST_WARNING)]; |
35 NSString* buttonTitle = | 37 NSString* buttonTitle = |
36 l10n_util::GetNSString(IDS_HTTP_POST_WARNING_RESEND); | 38 l10n_util::GetNSString(IDS_HTTP_POST_WARNING_RESEND); |
37 NSString* cancelTitle = l10n_util::GetNSString(IDS_CANCEL); | 39 NSString* cancelTitle = l10n_util::GetNSString(IDS_CANCEL); |
38 | 40 |
39 _alertController.reset([[UIAlertController | 41 _alertController = [UIAlertController |
40 alertControllerWithTitle:nil | 42 alertControllerWithTitle:nil |
41 message:message | 43 message:message |
42 preferredStyle:UIAlertControllerStyleActionSheet] retain]); | 44 preferredStyle:UIAlertControllerStyleActionSheet]; |
43 | 45 continueBlock = [^() { |
lpromero
2016/12/05 14:39:10
Remove this.
stkhapugin
2016/12/05 16:24:28
Done.
| |
46 } copy]; | |
44 // Make sure the blocks are located on the heap. | 47 // Make sure the blocks are located on the heap. |
45 base::mac::ScopedBlock<ProceduralBlock> guaranteeOnHeap; | 48 continueBlock = [continueBlock copy]; |
46 guaranteeOnHeap.reset([continueBlock copy]); | 49 cancelBlock = [cancelBlock copy]; |
47 guaranteeOnHeap.reset([cancelBlock copy]); | |
48 | 50 |
49 UIAlertAction* cancelAction = | 51 UIAlertAction* cancelAction = |
50 [UIAlertAction actionWithTitle:cancelTitle | 52 [UIAlertAction actionWithTitle:cancelTitle |
51 style:UIAlertActionStyleCancel | 53 style:UIAlertActionStyleCancel |
52 handler:^(UIAlertAction* _Nonnull action) { | 54 handler:^(UIAlertAction* _Nonnull action) { |
53 cancelBlock(); | 55 cancelBlock(); |
54 }]; | 56 }]; |
55 [_alertController addAction:cancelAction]; | 57 [_alertController addAction:cancelAction]; |
56 UIAlertAction* continueAction = | 58 UIAlertAction* continueAction = |
57 [UIAlertAction actionWithTitle:buttonTitle | 59 [UIAlertAction actionWithTitle:buttonTitle |
58 style:UIAlertActionStyleDefault | 60 style:UIAlertActionStyleDefault |
59 handler:^(UIAlertAction* _Nonnull action) { | 61 handler:^(UIAlertAction* _Nonnull action) { |
60 continueBlock(); | 62 continueBlock(); |
61 }]; | 63 }]; |
62 [_alertController addAction:continueAction]; | 64 [_alertController addAction:continueAction]; |
63 } | 65 } |
64 return self; | 66 return self; |
65 } | 67 } |
66 | 68 |
67 - (void)presentActionSheetFromRect:(CGRect)rect inView:(UIView*)view { | 69 - (void)presentActionSheetFromRect:(CGRect)rect inView:(UIView*)view { |
68 _alertController.get().modalPresentationStyle = UIModalPresentationPopover; | 70 _alertController.modalPresentationStyle = UIModalPresentationPopover; |
69 UIPopoverPresentationController* popPresenter = | 71 UIPopoverPresentationController* popPresenter = |
70 _alertController.get().popoverPresentationController; | 72 _alertController.popoverPresentationController; |
71 popPresenter.sourceView = view; | 73 popPresenter.sourceView = view; |
72 popPresenter.sourceRect = rect; | 74 popPresenter.sourceRect = rect; |
73 | 75 |
74 UIViewController* topController = view.window.rootViewController; | 76 UIViewController* topController = view.window.rootViewController; |
75 while (topController.presentedViewController) | 77 while (topController.presentedViewController) |
76 topController = topController.presentedViewController; | 78 topController = topController.presentedViewController; |
77 [topController presentViewController:_alertController | 79 [topController presentViewController:_alertController |
78 animated:YES | 80 animated:YES |
79 completion:nil]; | 81 completion:nil]; |
80 } | 82 } |
81 | 83 |
82 - (void)dismissActionSheet { | 84 - (void)dismissActionSheet { |
83 [_alertController.get().presentingViewController | 85 [_alertController.presentingViewController dismissViewControllerAnimated:YES |
84 dismissViewControllerAnimated:YES | 86 completion:nil]; |
85 completion:nil]; | |
86 } | 87 } |
87 | 88 |
88 @end | 89 @end |
OLD | NEW |