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

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: Apply review comments. 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 24 matching lines...) Expand all
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 40
41 - (void)back; 41 - (void)back;
42 - (void)forward; 42 - (void)forward;
43 - (void)stopLoading; 43 - (void)stopLoading;
44 // Disconnects and release the |webView|. 44 // Disconnects and release the |webView|.
45 - (void)resetWebView; 45 - (void)removeWebView;
46 @end 46 @end
47 47
48 @implementation ShellViewController 48 @implementation ShellViewController
49 49
50 @synthesize backButton = _backButton; 50 @synthesize backButton = _backButton;
51 @synthesize containerView = _containerView; 51 @synthesize containerView = _containerView;
52 @synthesize field = _field; 52 @synthesize field = _field;
53 @synthesize forwardButton = _forwardButton; 53 @synthesize forwardButton = _forwardButton;
54 @synthesize toolbar = _toolbar; 54 @synthesize toolbar = _toolbar;
55 @synthesize webView = _webView; 55 @synthesize webView = _webView;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 forControlEvents:UIControlEventTouchUpInside]; 150 forControlEvents:UIControlEventTouchUpInside];
151 151
152 [_toolbar addSubview:_backButton]; 152 [_toolbar addSubview:_backButton];
153 [_toolbar addSubview:_forwardButton]; 153 [_toolbar addSubview:_forwardButton];
154 [_toolbar addSubview:stop]; 154 [_toolbar addSubview:stop];
155 [_toolbar addSubview:menu]; 155 [_toolbar addSubview:menu];
156 [_toolbar addSubview:_field]; 156 [_toolbar addSubview:_field];
157 157
158 [CWVWebView setUserAgentProduct:@"Dummy/1.0"]; 158 [CWVWebView setUserAgentProduct:@"Dummy/1.0"];
159 159
160 CWVWebViewConfiguration* configuration = 160 [self createWebViewWithConfiguration:[CWVWebViewConfiguration
161 [CWVWebViewConfiguration defaultConfiguration]; 161 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 } 162 }
188 163
189 - (void)observeValueForKeyPath:(NSString*)keyPath 164 - (void)observeValueForKeyPath:(NSString*)keyPath
190 ofObject:(id)object 165 ofObject:(id)object
191 change:(NSDictionary<NSKeyValueChangeKey, id>*)change 166 change:(NSDictionary<NSKeyValueChangeKey, id>*)change
192 context:(void*)context { 167 context:(void*)context {
193 if ([keyPath isEqualToString:@"canGoBack"]) { 168 if ([keyPath isEqualToString:@"canGoBack"]) {
194 _backButton.enabled = [_webView canGoBack]; 169 _backButton.enabled = [_webView canGoBack];
195 } else if ([keyPath isEqualToString:@"canGoForward"]) { 170 } else if ([keyPath isEqualToString:@"canGoForward"]) {
196 _forwardButton.enabled = [_webView canGoForward]; 171 _forwardButton.enabled = [_webView canGoForward];
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 207
233 __weak ShellViewController* weakSelf = self; 208 __weak ShellViewController* weakSelf = self;
234 209
235 [alertController 210 [alertController
236 addAction:[UIAlertAction actionWithTitle:@"Reload" 211 addAction:[UIAlertAction actionWithTitle:@"Reload"
237 style:UIAlertActionStyleDefault 212 style:UIAlertActionStyleDefault
238 handler:^(UIAlertAction* action) { 213 handler:^(UIAlertAction* action) {
239 [weakSelf.webView reload]; 214 [weakSelf.webView reload];
240 }]]; 215 }]];
241 216
242 // Removes the web view from the view hierarchy and releases it. For 217 // Toggles the incognito mode.
243 // testing deallocation behavior, because there have been multiple crash bugs 218 NSString* incognitoActionTitle = _webView.configuration.persistent
244 // on deallocation of CWVWebView. 219 ? @"Enter incognito"
220 : @"Exit incognito";
245 [alertController 221 [alertController
246 addAction:[UIAlertAction actionWithTitle:@"Deallocate web view" 222 addAction:[UIAlertAction actionWithTitle:incognitoActionTitle
247 style:UIAlertActionStyleDefault 223 style:UIAlertActionStyleDefault
248 handler:^(UIAlertAction* action) { 224 handler:^(UIAlertAction* action) {
249 [weakSelf resetWebView]; 225 [weakSelf toggleIncognito];
250 }]]; 226 }]];
251 227
228 // Removes the web view from the view hierarchy, releases it, and recreates
229 // the web view with the same configuration. This is for testing deallocation
230 // and sharing configuration.
231 [alertController
232 addAction:[UIAlertAction
233 actionWithTitle:@"Recreate web view"
234 style:UIAlertActionStyleDefault
235 handler:^(UIAlertAction* action) {
236 CWVWebViewConfiguration* configuration =
237 weakSelf.webView.configuration;
238 [weakSelf removeWebView];
239 [weakSelf
240 createWebViewWithConfiguration:configuration];
241 }]];
242
252 [self presentViewController:alertController animated:YES completion:nil]; 243 [self presentViewController:alertController animated:YES completion:nil];
253 } 244 }
254 245
255 - (void)resetWebView { 246 - (void)toggleIncognito {
247 BOOL wasPersistent = _webView.configuration.persistent;
248 [self removeWebView];
249 CWVWebViewConfiguration* newConfiguration =
250 wasPersistent ? [CWVWebViewConfiguration incognitoConfiguration]
251 : [CWVWebViewConfiguration defaultConfiguration];
252 [self createWebViewWithConfiguration:newConfiguration];
253 }
254
255 - (void)createWebViewWithConfiguration:(CWVWebViewConfiguration*)configuration {
256 self.webView = [[CWVWebView alloc] initWithFrame:[_containerView bounds]
257 configuration:configuration];
258 // Gives a restoration identifier so that state restoration works.
259 _webView.restorationIdentifier = @"webView";
260 _webView.navigationDelegate = self;
261 _webView.UIDelegate = self;
262 _translationDelegate = [[ShellTranslationDelegate alloc] init];
263 _webView.translationController.delegate = _translationDelegate;
264
265 [_webView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
266 UIViewAutoresizingFlexibleHeight];
267 [_containerView addSubview:_webView];
268
269 [_webView addObserver:self
270 forKeyPath:@"canGoBack"
271 options:NSKeyValueObservingOptionNew
272 context:nil];
273 [_webView addObserver:self
274 forKeyPath:@"canGoForward"
275 options:NSKeyValueObservingOptionNew
276 context:nil];
277
278 NSURLRequest* request = [NSURLRequest
279 requestWithURL:[NSURL URLWithString:@"https://www.google.com/"]];
280 [_webView loadRequest:request];
281 }
282
283 - (void)removeWebView {
256 [_webView removeFromSuperview]; 284 [_webView removeFromSuperview];
257 [_webView removeObserver:self forKeyPath:@"canGoBack"]; 285 [_webView removeObserver:self forKeyPath:@"canGoBack"];
258 [_webView removeObserver:self forKeyPath:@"canGoForward"]; 286 [_webView removeObserver:self forKeyPath:@"canGoForward"];
259 _webView = nil; 287 _webView = nil;
260 } 288 }
261 289
262 - (void)dealloc { 290 - (void)dealloc {
263 [_webView removeObserver:self forKeyPath:@"canGoBack"]; 291 [_webView removeObserver:self forKeyPath:@"canGoBack"];
264 [_webView removeObserver:self forKeyPath:@"canGoForward"]; 292 [_webView removeObserver:self forKeyPath:@"canGoForward"];
265 } 293 }
(...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 464 // TODO(crbug.com/679895): Add some visual indication that the page load has
437 // finished. 465 // finished.
438 [self updateToolbar]; 466 [self updateToolbar];
439 } 467 }
440 468
441 - (void)webViewWebContentProcessDidTerminate:(CWVWebView*)webView { 469 - (void)webViewWebContentProcessDidTerminate:(CWVWebView*)webView {
442 NSLog(@"webViewWebContentProcessDidTerminate"); 470 NSLog(@"webViewWebContentProcessDidTerminate");
443 } 471 }
444 472
445 @end 473 @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