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

Unified 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, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web_view/shell/shell_view_controller.m
diff --git a/ios/web_view/shell/shell_view_controller.m b/ios/web_view/shell/shell_view_controller.m
index 3815f50d1358f9898b42881d4c3c358682fd2d69..3aa390bf63731bcff44fa0bf040153489830044b 100644
--- a/ios/web_view/shell/shell_view_controller.m
+++ b/ios/web_view/shell/shell_view_controller.m
@@ -42,7 +42,7 @@ NSString* const kWebViewShellJavaScriptDialogTextFieldAccessibiltyIdentifier =
- (void)forward;
- (void)stopLoading;
// Disconnects and release the |webView|.
-- (void)resetWebView;
+- (void)removeWebView;
@end
@implementation ShellViewController
@@ -157,33 +157,8 @@ NSString* const kWebViewShellJavaScriptDialogTextFieldAccessibiltyIdentifier =
[CWVWebView setUserAgentProduct:@"Dummy/1.0"];
- CWVWebViewConfiguration* configuration =
- [CWVWebViewConfiguration defaultConfiguration];
- self.webView = [[CWVWebView alloc] initWithFrame:[_containerView bounds]
- configuration:configuration];
- // Gives a restoration identifier so that state restoration works.
- _webView.restorationIdentifier = @"webView";
- _webView.navigationDelegate = self;
- _webView.UIDelegate = self;
- _translationDelegate = [[ShellTranslationDelegate alloc] init];
- _webView.translationController.delegate = _translationDelegate;
-
- [_webView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
- UIViewAutoresizingFlexibleHeight];
- [_containerView addSubview:_webView];
-
- [_webView addObserver:self
- forKeyPath:@"canGoBack"
- options:NSKeyValueObservingOptionNew
- context:nil];
- [_webView addObserver:self
- forKeyPath:@"canGoForward"
- options:NSKeyValueObservingOptionNew
- context:nil];
-
- NSURLRequest* request = [NSURLRequest
- requestWithURL:[NSURL URLWithString:@"https://www.google.com/"]];
- [_webView loadRequest:request];
+ [self createWebViewWithConfiguration:[CWVWebViewConfiguration
+ defaultConfiguration]];
}
- (void)observeValueForKeyPath:(NSString*)keyPath
@@ -239,20 +214,73 @@ NSString* const kWebViewShellJavaScriptDialogTextFieldAccessibiltyIdentifier =
[weakSelf.webView reload];
}]];
- // Removes the web view from the view hierarchy and releases it. For
- // testing deallocation behavior, because there have been multiple crash bugs
- // on deallocation of CWVWebView.
+ // Toggles the incognito mode.
+ NSString* incognitoActionTitle = _webView.configuration.persistent
+ ? @"Enter incognito"
+ : @"Exit incognito";
[alertController
- addAction:[UIAlertAction actionWithTitle:@"Deallocate web view"
+ addAction:[UIAlertAction actionWithTitle:incognitoActionTitle
style:UIAlertActionStyleDefault
handler:^(UIAlertAction* action) {
- [weakSelf resetWebView];
+ [weakSelf toggleIncognito];
}]];
+ // Removes the web view from the view hierarchy, releases it, and recreates
+ // the web view with the same configuration. This is for testing deallocation
+ // and sharing configuration.
+ [alertController
+ addAction:[UIAlertAction
+ actionWithTitle:@"Recreate web view"
+ style:UIAlertActionStyleDefault
+ handler:^(UIAlertAction* action) {
+ CWVWebViewConfiguration* configuration =
+ weakSelf.webView.configuration;
+ [weakSelf removeWebView];
+ [weakSelf
+ createWebViewWithConfiguration:configuration];
+ }]];
+
[self presentViewController:alertController animated:YES completion:nil];
}
-- (void)resetWebView {
+- (void)toggleIncognito {
+ BOOL wasPersistent = _webView.configuration.persistent;
+ [self removeWebView];
+ CWVWebViewConfiguration* newConfiguration =
+ wasPersistent ? [CWVWebViewConfiguration incognitoConfiguration]
+ : [CWVWebViewConfiguration defaultConfiguration];
+ [self createWebViewWithConfiguration:newConfiguration];
+}
+
+- (void)createWebViewWithConfiguration:(CWVWebViewConfiguration*)configuration {
+ self.webView = [[CWVWebView alloc] initWithFrame:[_containerView bounds]
+ configuration:configuration];
+ // Gives a restoration identifier so that state restoration works.
+ _webView.restorationIdentifier = @"webView";
+ _webView.navigationDelegate = self;
+ _webView.UIDelegate = self;
+ _translationDelegate = [[ShellTranslationDelegate alloc] init];
+ _webView.translationController.delegate = _translationDelegate;
+
+ [_webView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
+ UIViewAutoresizingFlexibleHeight];
+ [_containerView addSubview:_webView];
+
+ [_webView addObserver:self
+ forKeyPath:@"canGoBack"
+ options:NSKeyValueObservingOptionNew
+ context:nil];
+ [_webView addObserver:self
+ forKeyPath:@"canGoForward"
+ options:NSKeyValueObservingOptionNew
+ context:nil];
+
+ NSURLRequest* request = [NSURLRequest
+ requestWithURL:[NSURL URLWithString:@"https://www.google.com/"]];
+ [_webView loadRequest:request];
+}
+
+- (void)removeWebView {
[_webView removeFromSuperview];
[_webView removeObserver:self forKeyPath:@"canGoBack"];
[_webView removeObserver:self forKeyPath:@"canGoForward"];
« 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