Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: ios/web/web_state/ui/crw_web_controller_container_view.mm

Issue 2432363003: [ObjC ARC] Converts parts of ios/web/webstate to ARC. (Closed)
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/web/web_state/ui/crw_web_controller_container_view.h" 5 #import "ios/web/web_state/ui/crw_web_controller_container_view.h"
6 6
7 #include "base/ios/weak_nsobject.h"
8 #include "base/logging.h" 7 #include "base/logging.h"
9 #include "base/mac/scoped_nsobject.h" 8 #include "base/mac/scoped_nsobject.h"
10 #import "ios/web/public/web_state/ui/crw_content_view.h" 9 #import "ios/web/public/web_state/ui/crw_content_view.h"
11 #import "ios/web/public/web_state/ui/crw_native_content.h" 10 #import "ios/web/public/web_state/ui/crw_native_content.h"
12 #import "ios/web/public/web_state/ui/crw_web_view_content_view.h" 11 #import "ios/web/public/web_state/ui/crw_web_view_content_view.h"
13 #import "ios/web/web_state/crw_web_view_proxy_impl.h" 12 #import "ios/web/web_state/crw_web_view_proxy_impl.h"
14 13
14 #if !defined(__has_feature) || !__has_feature(objc_arc)
15 #error "This file requires ARC support."
16 #endif
17
15 #pragma mark - CRWToolbarContainerView 18 #pragma mark - CRWToolbarContainerView
16 19
17 // Class that manages the display of toolbars. 20 // Class that manages the display of toolbars.
18 @interface CRWToolbarContainerView : UIView { 21 @interface CRWToolbarContainerView : UIView {
19 // Backing object for |self.toolbars|. 22 // Backing object for |self.toolbars|.
20 base::scoped_nsobject<NSMutableArray> _toolbars; 23 base::scoped_nsobject<NSMutableArray> _toolbars;
21 } 24 }
22 25
23 // The toolbars currently managed by this view. 26 // The toolbars currently managed by this view.
24 @property(nonatomic, retain, readonly) NSMutableArray* toolbars; 27 @property(nonatomic, strong, readonly) NSMutableArray* toolbars;
25 28
26 // Adds |toolbar| as a subview and bottom aligns to any previously added 29 // Adds |toolbar| as a subview and bottom aligns to any previously added
27 // toolbars. 30 // toolbars.
28 - (void)addToolbar:(UIView*)toolbar; 31 - (void)addToolbar:(UIView*)toolbar;
29 32
30 // Removes |toolbar| from the container view. 33 // Removes |toolbar| from the container view.
31 - (void)removeToolbar:(UIView*)toolbar; 34 - (void)removeToolbar:(UIView*)toolbar;
32 35
33 @end 36 @end
34 37
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 [self.toolbars removeObject:toolbar]; 86 [self.toolbars removeObject:toolbar];
84 [toolbar removeFromSuperview]; 87 [toolbar removeFromSuperview];
85 } 88 }
86 89
87 @end 90 @end
88 91
89 #pragma mark - CRWWebControllerContainerView 92 #pragma mark - CRWWebControllerContainerView
90 93
91 @interface CRWWebControllerContainerView () { 94 @interface CRWWebControllerContainerView () {
92 // The delegate passed on initialization. 95 // The delegate passed on initialization.
93 base::WeakNSProtocol<id<CRWWebControllerContainerViewDelegate>> _delegate; 96 __weak id<CRWWebControllerContainerViewDelegate> _delegate;
94 // Backing objects for corresponding properties. 97 // Backing objects for corresponding properties.
95 base::scoped_nsobject<CRWWebViewContentView> _webViewContentView; 98 base::scoped_nsobject<CRWWebViewContentView> _webViewContentView;
96 base::scoped_nsprotocol<id<CRWNativeContent>> _nativeController; 99 base::scoped_nsprotocol<id<CRWNativeContent>> _nativeController;
97 base::scoped_nsobject<CRWContentView> _transientContentView; 100 base::scoped_nsobject<CRWContentView> _transientContentView;
98 base::scoped_nsobject<CRWToolbarContainerView> _toolbarContainerView; 101 base::scoped_nsobject<CRWToolbarContainerView> _toolbarContainerView;
99 } 102 }
100 103
101 // Redefine properties as readwrite. 104 // Redefine properties as readwrite.
102 @property(nonatomic, retain, readwrite) 105 @property(nonatomic, strong, readwrite)
103 CRWWebViewContentView* webViewContentView; 106 CRWWebViewContentView* webViewContentView;
104 @property(nonatomic, retain, readwrite) id<CRWNativeContent> nativeController; 107 @property(nonatomic, strong, readwrite) id<CRWNativeContent> nativeController;
105 @property(nonatomic, retain, readwrite) CRWContentView* transientContentView; 108 @property(nonatomic, strong, readwrite) CRWContentView* transientContentView;
106 109
107 // Container view that displays any added toolbars. It is always the top-most 110 // Container view that displays any added toolbars. It is always the top-most
108 // subview, and is bottom aligned with the CRWWebControllerContainerView. 111 // subview, and is bottom aligned with the CRWWebControllerContainerView.
109 @property(nonatomic, retain, readonly) 112 @property(nonatomic, strong, readonly)
110 CRWToolbarContainerView* toolbarContainerView; 113 CRWToolbarContainerView* toolbarContainerView;
111 114
112 // Convenience getter for the proxy object. 115 // Convenience getter for the proxy object.
113 @property(nonatomic, readonly) CRWWebViewProxyImpl* contentViewProxy; 116 @property(weak, nonatomic, readonly) CRWWebViewProxyImpl* contentViewProxy;
114 117
115 // Returns |self.bounds| after being inset at the top by the header height 118 // Returns |self.bounds| after being inset at the top by the header height
116 // returned by the delegate. This is only used to lay out native controllers, 119 // returned by the delegate. This is only used to lay out native controllers,
117 // as the header height is already accounted for in the scroll view content 120 // as the header height is already accounted for in the scroll view content
118 // insets for other CRWContentViews. 121 // insets for other CRWContentViews.
119 @property(nonatomic, readonly) CGRect visibleFrame; 122 @property(nonatomic, readonly) CGRect visibleFrame;
120 123
121 @end 124 @end
122 125
123 @implementation CRWWebControllerContainerView 126 @implementation CRWWebControllerContainerView
127 @synthesize delegate = _delegate;
124 128
125 - (instancetype)initWithDelegate: 129 - (instancetype)initWithDelegate:
126 (id<CRWWebControllerContainerViewDelegate>)delegate { 130 (id<CRWWebControllerContainerViewDelegate>)delegate {
127 self = [super initWithFrame:CGRectZero]; 131 self = [super initWithFrame:CGRectZero];
128 if (self) { 132 if (self) {
129 DCHECK(delegate); 133 DCHECK(delegate);
130 _delegate.reset(delegate); 134 _delegate = delegate;
131 self.backgroundColor = [UIColor whiteColor]; 135 self.backgroundColor = [UIColor whiteColor];
132 self.autoresizingMask = 136 self.autoresizingMask =
133 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 137 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
134 } 138 }
135 return self; 139 return self;
136 } 140 }
137 141
138 - (instancetype)initWithCoder:(NSCoder*)decoder { 142 - (instancetype)initWithCoder:(NSCoder*)decoder {
139 NOTREACHED(); 143 NOTREACHED();
140 return nil; 144 return nil;
141 } 145 }
142 146
143 - (instancetype)initWithFrame:(CGRect)frame { 147 - (instancetype)initWithFrame:(CGRect)frame {
144 NOTREACHED(); 148 NOTREACHED();
145 return nil; 149 return nil;
146 } 150 }
147 151
148 - (void)dealloc { 152 - (void)dealloc {
149 self.contentViewProxy.contentView = nil; 153 self.contentViewProxy.contentView = nil;
150 [super dealloc];
151 } 154 }
152 155
153 #pragma mark Accessors 156 #pragma mark Accessors
154 157
155 - (id<CRWWebControllerContainerViewDelegate>)delegate {
156 return _delegate.get();
157 }
158
159 - (void)setDelegate:(id<CRWWebControllerContainerViewDelegate>)delegate {
160 _delegate.reset(delegate);
161 }
162
163 - (CRWWebViewContentView*)webViewContentView { 158 - (CRWWebViewContentView*)webViewContentView {
164 return _webViewContentView.get(); 159 return _webViewContentView.get();
165 } 160 }
166 161
167 - (void)setWebViewContentView:(CRWWebViewContentView*)webViewContentView { 162 - (void)setWebViewContentView:(CRWWebViewContentView*)webViewContentView {
168 if (![_webViewContentView isEqual:webViewContentView]) { 163 if (![_webViewContentView isEqual:webViewContentView]) {
169 [_webViewContentView removeFromSuperview]; 164 [_webViewContentView removeFromSuperview];
170 _webViewContentView.reset([webViewContentView retain]); 165 _webViewContentView.reset(webViewContentView);
171 [_webViewContentView setFrame:self.bounds]; 166 [_webViewContentView setFrame:self.bounds];
172 [self addSubview:_webViewContentView]; 167 [self addSubview:_webViewContentView];
173 } 168 }
174 } 169 }
175 170
176 - (id<CRWNativeContent>)nativeController { 171 - (id<CRWNativeContent>)nativeController {
177 return _nativeController.get(); 172 return _nativeController.get();
178 } 173 }
179 174
180 - (void)setNativeController:(id<CRWNativeContent>)nativeController { 175 - (void)setNativeController:(id<CRWNativeContent>)nativeController {
181 if (![_nativeController isEqual:nativeController]) { 176 if (![_nativeController isEqual:nativeController]) {
182 base::WeakNSProtocol<id> oldController(_nativeController); 177 __weak id oldController = _nativeController;
183 [[oldController view] removeFromSuperview]; 178 [[oldController view] removeFromSuperview];
184 _nativeController.reset([nativeController retain]); 179 _nativeController.reset(nativeController);
185 // TODO(crbug.com/503297): Re-enable this DCHECK once native controller 180 // TODO(crbug.com/503297): Re-enable this DCHECK once native controller
186 // leaks are fixed. 181 // leaks are fixed.
187 // DCHECK(!oldController); 182 // DCHECK(!oldController);
188 } 183 }
189 } 184 }
190 185
191 - (CRWContentView*)transientContentView { 186 - (CRWContentView*)transientContentView {
192 return _transientContentView.get(); 187 return _transientContentView.get();
193 } 188 }
194 189
195 - (void)setTransientContentView:(CRWContentView*)transientContentView { 190 - (void)setTransientContentView:(CRWContentView*)transientContentView {
196 if (![_transientContentView isEqual:transientContentView]) { 191 if (![_transientContentView isEqual:transientContentView]) {
197 [_transientContentView removeFromSuperview]; 192 [_transientContentView removeFromSuperview];
198 _transientContentView.reset([transientContentView retain]); 193 _transientContentView.reset(transientContentView);
199 } 194 }
200 } 195 }
201 196
202 - (void)setToolbarContainerView:(CRWToolbarContainerView*)toolbarContainerView { 197 - (void)setToolbarContainerView:(CRWToolbarContainerView*)toolbarContainerView {
203 if (![_toolbarContainerView isEqual:toolbarContainerView]) { 198 if (![_toolbarContainerView isEqual:toolbarContainerView]) {
204 [_toolbarContainerView removeFromSuperview]; 199 [_toolbarContainerView removeFromSuperview];
205 _toolbarContainerView.reset([toolbarContainerView retain]); 200 _toolbarContainerView.reset(toolbarContainerView);
206 } 201 }
207 } 202 }
208 203
209 - (UIView*)toolbarContainerView { 204 - (UIView*)toolbarContainerView {
210 return _toolbarContainerView.get(); 205 return _toolbarContainerView.get();
211 } 206 }
212 207
213 - (CRWWebViewProxyImpl*)contentViewProxy { 208 - (CRWWebViewProxyImpl*)contentViewProxy {
214 return [_delegate contentViewProxyForContainerView:self]; 209 return [_delegate contentViewProxyForContainerView:self];
215 } 210 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 - (void)clearTransientContentView { 300 - (void)clearTransientContentView {
306 self.transientContentView = nil; 301 self.transientContentView = nil;
307 self.contentViewProxy.contentView = self.webViewContentView; 302 self.contentViewProxy.contentView = self.webViewContentView;
308 } 303 }
309 304
310 #pragma mark Toolbars 305 #pragma mark Toolbars
311 306
312 - (void)addToolbar:(UIView*)toolbar { 307 - (void)addToolbar:(UIView*)toolbar {
313 // Create toolbar container if necessary. 308 // Create toolbar container if necessary.
314 if (!self.toolbarContainerView) { 309 if (!self.toolbarContainerView) {
315 self.toolbarContainerView = [ 310 self.toolbarContainerView =
316 [[CRWToolbarContainerView alloc] initWithFrame:CGRectZero] autorelease]; 311 [[CRWToolbarContainerView alloc] initWithFrame:CGRectZero];
317 } 312 }
318 // Add the toolbar to the container. 313 // Add the toolbar to the container.
319 [self.toolbarContainerView addToolbar:toolbar]; 314 [self.toolbarContainerView addToolbar:toolbar];
320 [self setNeedsLayout]; 315 [self setNeedsLayout];
321 } 316 }
322 317
323 - (void)addToolbars:(NSArray*)toolbars { 318 - (void)addToolbars:(NSArray*)toolbars {
324 DCHECK(toolbars); 319 DCHECK(toolbars);
325 for (UIView* toolbar in toolbars) 320 for (UIView* toolbar in toolbars)
326 [self addToolbar:toolbar]; 321 [self addToolbar:toolbar];
327 } 322 }
328 323
329 - (void)removeToolbar:(UIView*)toolbar { 324 - (void)removeToolbar:(UIView*)toolbar {
330 // Remove the toolbar from the container view. 325 // Remove the toolbar from the container view.
331 [self.toolbarContainerView removeToolbar:toolbar]; 326 [self.toolbarContainerView removeToolbar:toolbar];
332 // Reset the container if there are no more toolbars. 327 // Reset the container if there are no more toolbars.
333 if ([self.toolbarContainerView.toolbars count]) 328 if ([self.toolbarContainerView.toolbars count])
334 [self setNeedsLayout]; 329 [self setNeedsLayout];
335 else 330 else
336 self.toolbarContainerView = nil; 331 self.toolbarContainerView = nil;
337 } 332 }
338 333
339 - (void)removeAllToolbars { 334 - (void)removeAllToolbars {
340 // Resetting the property will remove the toolbars from the hierarchy. 335 // Resetting the property will remove the toolbars from the hierarchy.
341 self.toolbarContainerView = nil; 336 self.toolbarContainerView = nil;
342 } 337 }
343 338
344 @end 339 @end
OLDNEW
« no previous file with comments | « ios/web/web_state/ui/crw_web_controller_container_view.h ('k') | ios/web/web_state/ui/crw_web_view_content_view.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698