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

Side by Side Diff: ios/web_view/shell/shell_view_controller.m

Issue 2917583002: Add a menu item to toggle the incognito mode in ios_web_view_shell. (Closed)
Patch Set: Created 3 years, 6 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_view/shell/shell_view_controller.h" 5 #import "ios/web_view/shell/shell_view_controller.h"
6 6
7 #import <ChromeWebView/ChromeWebView.h> 7 #import <ChromeWebView/ChromeWebView.h>
8 #import <MobileCoreServices/MobileCoreServices.h> 8 #import <MobileCoreServices/MobileCoreServices.h>
9 9
10 #import "ios/web_view/shell/shell_translation_delegate.h" 10 #import "ios/web_view/shell/shell_translation_delegate.h"
(...skipping 19 matching lines...) Expand all
30 // Toolbar button to navigate backwards. 30 // Toolbar button to navigate backwards.
31 @property(nonatomic, strong) UIButton* backButton; 31 @property(nonatomic, strong) UIButton* backButton;
32 // Toolbar button to navigate forwards. 32 // Toolbar button to navigate forwards.
33 @property(nonatomic, strong) UIButton* forwardButton; 33 @property(nonatomic, strong) UIButton* forwardButton;
34 // Toolbar containing navigation buttons and |field|. 34 // Toolbar containing navigation buttons and |field|.
35 @property(nonatomic, strong) UIToolbar* toolbar; 35 @property(nonatomic, strong) UIToolbar* toolbar;
36 // CWV view which renders the web page. 36 // CWV view which renders the web page.
37 @property(nonatomic, strong) CWVWebView* webView; 37 @property(nonatomic, strong) CWVWebView* webView;
38 // Handles the translation of the content displayed in |webView|. 38 // Handles the translation of the content displayed in |webView|.
39 @property(nonatomic, strong) ShellTranslationDelegate* translationDelegate; 39 @property(nonatomic, strong) ShellTranslationDelegate* translationDelegate;
40 // Whether it's in the incognito mode.
41 @property(nonatomic) BOOL isIncognito;
michaeldo 2017/05/31 21:21:10 I actually think it would be better to either use
Hiroshi Ichikawa 2017/06/01 01:20:37 Done.
40 42
41 - (void)back; 43 - (void)back;
42 - (void)forward; 44 - (void)forward;
43 - (void)stopLoading; 45 - (void)stopLoading;
44 // Disconnects and release the |webView|. 46 // Disconnects and release the |webView|.
45 - (void)resetWebView; 47 - (void)removeWebView;
46 @end 48 @end
47 49
48 @implementation ShellViewController 50 @implementation ShellViewController
49 51
50 @synthesize backButton = _backButton; 52 @synthesize backButton = _backButton;
51 @synthesize containerView = _containerView; 53 @synthesize containerView = _containerView;
52 @synthesize field = _field; 54 @synthesize field = _field;
53 @synthesize forwardButton = _forwardButton; 55 @synthesize forwardButton = _forwardButton;
54 @synthesize toolbar = _toolbar; 56 @synthesize toolbar = _toolbar;
55 @synthesize webView = _webView; 57 @synthesize webView = _webView;
56 @synthesize translationDelegate = _translationDelegate; 58 @synthesize translationDelegate = _translationDelegate;
59 @synthesize isIncognito = _isIncognito;
57 60
58 - (void)viewDidLoad { 61 - (void)viewDidLoad {
59 [super viewDidLoad]; 62 [super viewDidLoad];
60 63
61 CGRect bounds = self.view.bounds; 64 CGRect bounds = self.view.bounds;
62 65
63 // Set up the toolbar. 66 // Set up the toolbar.
64 self.toolbar = [[UIToolbar alloc] init]; 67 self.toolbar = [[UIToolbar alloc] init];
65 [_toolbar setBarTintColor:[UIColor colorWithRed:0.337 68 [_toolbar setBarTintColor:[UIColor colorWithRed:0.337
66 green:0.467 69 green:0.467
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 forControlEvents:UIControlEventTouchUpInside]; 153 forControlEvents:UIControlEventTouchUpInside];
151 154
152 [_toolbar addSubview:_backButton]; 155 [_toolbar addSubview:_backButton];
153 [_toolbar addSubview:_forwardButton]; 156 [_toolbar addSubview:_forwardButton];
154 [_toolbar addSubview:stop]; 157 [_toolbar addSubview:stop];
155 [_toolbar addSubview:menu]; 158 [_toolbar addSubview:menu];
156 [_toolbar addSubview:_field]; 159 [_toolbar addSubview:_field];
157 160
158 [CWVWebView setUserAgentProduct:@"Dummy/1.0"]; 161 [CWVWebView setUserAgentProduct:@"Dummy/1.0"];
159 162
160 CWVWebViewConfiguration* configuration = 163 [self createWebViewWithConfiguration:[self createConfiguration]];
michaeldo 2017/05/31 21:21:09 I think explicitly using [CWVWebViewConfiguration
Hiroshi Ichikawa 2017/06/01 01:20:37 Done.
161 [CWVWebViewConfiguration defaultConfiguration];
162 self.webView = [[CWVWebView alloc] initWithFrame:[_containerView bounds]
163 configuration:configuration];
164 // Gives a restoration identifier so that state restoration works.
165 _webView.restorationIdentifier = @"webView";
166 _webView.navigationDelegate = self;
167 _webView.UIDelegate = self;
168 _translationDelegate = [[ShellTranslationDelegate alloc] init];
169 _webView.translationController.delegate = _translationDelegate;
170
171 [_webView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
172 UIViewAutoresizingFlexibleHeight];
173 [_containerView addSubview:_webView];
174
175 [_webView addObserver:self
176 forKeyPath:@"canGoBack"
177 options:NSKeyValueObservingOptionNew
178 context:nil];
179 [_webView addObserver:self
180 forKeyPath:@"canGoForward"
181 options:NSKeyValueObservingOptionNew
182 context:nil];
183
184 NSURLRequest* request = [NSURLRequest
185 requestWithURL:[NSURL URLWithString:@"https://www.google.com/"]];
186 [_webView loadRequest:request];
187 } 164 }
188 165
189 - (void)observeValueForKeyPath:(NSString*)keyPath 166 - (void)observeValueForKeyPath:(NSString*)keyPath
190 ofObject:(id)object 167 ofObject:(id)object
191 change:(NSDictionary<NSKeyValueChangeKey, id>*)change 168 change:(NSDictionary<NSKeyValueChangeKey, id>*)change
192 context:(void*)context { 169 context:(void*)context {
193 if ([keyPath isEqualToString:@"canGoBack"]) { 170 if ([keyPath isEqualToString:@"canGoBack"]) {
194 _backButton.enabled = [_webView canGoBack]; 171 _backButton.enabled = [_webView canGoBack];
195 } else if ([keyPath isEqualToString:@"canGoForward"]) { 172 } else if ([keyPath isEqualToString:@"canGoForward"]) {
196 _forwardButton.enabled = [_webView canGoForward]; 173 _forwardButton.enabled = [_webView canGoForward];
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 209
233 __weak ShellViewController* weakSelf = self; 210 __weak ShellViewController* weakSelf = self;
234 211
235 [alertController 212 [alertController
236 addAction:[UIAlertAction actionWithTitle:@"Reload" 213 addAction:[UIAlertAction actionWithTitle:@"Reload"
237 style:UIAlertActionStyleDefault 214 style:UIAlertActionStyleDefault
238 handler:^(UIAlertAction* action) { 215 handler:^(UIAlertAction* action) {
239 [weakSelf.webView reload]; 216 [weakSelf.webView reload];
240 }]]; 217 }]];
241 218
242 // Removes the web view from the view hierarchy and releases it. For 219 // Toggles the incognito mode.
243 // testing deallocation behavior, because there have been multiple crash bugs 220 NSString* incognitoActionTitle =
244 // on deallocation of CWVWebView. 221 _isIncognito ? @"Exit incognito" : @"Enter incognito";
245 [alertController 222 [alertController
246 addAction:[UIAlertAction actionWithTitle:@"Deallocate web view" 223 addAction:[UIAlertAction
247 style:UIAlertActionStyleDefault 224 actionWithTitle:incognitoActionTitle
248 handler:^(UIAlertAction* action) { 225 style:UIAlertActionStyleDefault
249 [weakSelf resetWebView]; 226 handler:^(UIAlertAction* action) {
250 }]]; 227 [weakSelf removeWebView];
228 weakSelf.isIncognito = !weakSelf.isIncognito;
229 [weakSelf createWebViewWithConfiguration:
230 [weakSelf createConfiguration]];
231 }]];
232
233 // Removes the web view from the view hierarchy, releases it, and recreates
234 // the web view with the same configuration. This is for testing deallocation
235 // and sharing configuration, because there have been multiple bugs on these
michaeldo 2017/05/31 21:21:10 I think you can remove the ", because there have b
Hiroshi Ichikawa 2017/06/01 01:20:36 Done.
236 // features.
237 [alertController
238 addAction:[UIAlertAction
239 actionWithTitle:@"Recreate web view"
240 style:UIAlertActionStyleDefault
241 handler:^(UIAlertAction* action) {
242 CWVWebViewConfiguration* configuration =
243 weakSelf.webView.configuration;
244 [weakSelf removeWebView];
245 [weakSelf
246 createWebViewWithConfiguration:configuration];
247 }]];
251 248
252 [self presentViewController:alertController animated:YES completion:nil]; 249 [self presentViewController:alertController animated:YES completion:nil];
253 } 250 }
254 251
255 - (void)resetWebView { 252 - (CWVWebViewConfiguration*)createConfiguration {
michaeldo 2017/05/31 21:21:10 Per comment above, I don't think we need this. We
Hiroshi Ichikawa 2017/06/01 01:20:37 Done. I also extracted -toggleIncognito as a metho
253 return _isIncognito ? [CWVWebViewConfiguration incognitoConfiguration]
254 : [CWVWebViewConfiguration defaultConfiguration];
255 }
256
257 - (void)createWebViewWithConfiguration:(CWVWebViewConfiguration*)configuration {
258 self.webView = [[CWVWebView alloc] initWithFrame:[_containerView bounds]
259 configuration:configuration];
260 // Gives a restoration identifier so that state restoration works.
261 _webView.restorationIdentifier = @"webView";
262 _webView.navigationDelegate = self;
263 _webView.UIDelegate = self;
264 _translationDelegate = [[ShellTranslationDelegate alloc] init];
265 _webView.translationController.delegate = _translationDelegate;
266
267 [_webView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
268 UIViewAutoresizingFlexibleHeight];
269 [_containerView addSubview:_webView];
270
271 [_webView addObserver:self
272 forKeyPath:@"canGoBack"
273 options:NSKeyValueObservingOptionNew
274 context:nil];
275 [_webView addObserver:self
276 forKeyPath:@"canGoForward"
277 options:NSKeyValueObservingOptionNew
278 context:nil];
279
280 NSURLRequest* request = [NSURLRequest
281 requestWithURL:[NSURL URLWithString:@"https://www.google.com/"]];
282 [_webView loadRequest:request];
283 }
284
285 - (void)removeWebView {
256 [_webView removeFromSuperview]; 286 [_webView removeFromSuperview];
257 [_webView removeObserver:self forKeyPath:@"canGoBack"]; 287 [_webView removeObserver:self forKeyPath:@"canGoBack"];
258 [_webView removeObserver:self forKeyPath:@"canGoForward"]; 288 [_webView removeObserver:self forKeyPath:@"canGoForward"];
259 _webView = nil; 289 _webView = nil;
260 } 290 }
261 291
262 - (void)dealloc { 292 - (void)dealloc {
263 [_webView removeObserver:self forKeyPath:@"canGoBack"]; 293 [_webView removeObserver:self forKeyPath:@"canGoBack"];
264 [_webView removeObserver:self forKeyPath:@"canGoForward"]; 294 [_webView removeObserver:self forKeyPath:@"canGoForward"];
265 } 295 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 // TODO(crbug.com/679895): Add some visual indication that the page load has 466 // TODO(crbug.com/679895): Add some visual indication that the page load has
437 // finished. 467 // finished.
438 [self updateToolbar]; 468 [self updateToolbar];
439 } 469 }
440 470
441 - (void)webViewWebContentProcessDidTerminate:(CWVWebView*)webView { 471 - (void)webViewWebContentProcessDidTerminate:(CWVWebView*)webView {
442 NSLog(@"webViewWebContentProcessDidTerminate"); 472 NSLog(@"webViewWebContentProcessDidTerminate");
443 } 473 }
444 474
445 @end 475 @end
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698