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

Unified Diff: ios/web/web_state/ui/crw_web_controller.mm

Issue 1806043004: [ios] Refactored dialogs suppression. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Self review Created 4 years, 9 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
Index: ios/web/web_state/ui/crw_web_controller.mm
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 7b5d0346da944a5b93de86e66bb5cd67c10151da..b78dc1f403b95ddab6d1fc252ba0657ef692099c 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -241,9 +241,6 @@ void CancelTouches(UIGestureRecognizer* gesture_recognizer) {
// If |YES|, call setSuppressDialogs when core.js is injected into the web
// view.
BOOL _setSuppressDialogsLater;
- // If |YES|, call setSuppressDialogs when core.js is injected into the web
- // view.
- BOOL _setNotifyAboutDialogsLater;
// The URL of an expected future recreation of the |webView|. Valid
// only if the web view was discarded for non-user-visible reasons, such that
// if the next load request is for that URL, it should be treated as a
@@ -433,9 +430,9 @@ typedef void (^ViewportStateCompletion)(const web::PageViewportState*);
// Handles 'console' message.
- (BOOL)handleConsoleMessage:(base::DictionaryValue*)message
context:(NSDictionary*)context;
-// Handles 'dialog.suppressed' message.
-- (BOOL)handleDialogSuppressedMessage:(base::DictionaryValue*)message
- context:(NSDictionary*)context;
+// Handles 'geolocationDialog.suppressed' message.
+- (BOOL)handleGeolocationDialogSuppressedMessage:(base::DictionaryValue*)message
+ context:(NSDictionary*)context;
// Handles 'document.favicons' message.
- (BOOL)handleDocumentFaviconsMessage:(base::DictionaryValue*)message
context:(NSDictionary*)context;
@@ -521,6 +518,7 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
@synthesize webUsageEnabled = _webUsageEnabled;
@synthesize usePlaceholderOverlay = _usePlaceholderOverlay;
@synthesize loadPhase = _loadPhase;
+@synthesize suppressDialogs = _suppressDialogs;
// Implemented by subclasses.
@dynamic keyboardDisplayRequiresUserAction;
@@ -942,6 +940,17 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
return scrollView.contentOffset.y == -scrollView.contentInset.top;
}
+- (void)setSuppressDialogs:(BOOL)flag {
Jackie Quinn 2016/03/17 17:46:41 why "flag" versus something like "supressDialogs"?
Eugene But (OOO till 7-30) 2016/03/17 17:53:21 |flag| was shorter, but I guess suppressDialogs wo
+ _suppressDialogs = flag;
+ if (self.webView) {
+ NSString* const kSetSuppressDialogs = [NSString
+ stringWithFormat:@"__gCrWeb.setSuppressGeolocationDialogs(%d);", flag];
+ [self evaluateJavaScript:kSetSuppressDialogs stringResultHandler:nil];
+ } else {
+ _setSuppressDialogsLater = flag;
+ }
+}
+
- (void)presentSpoofingError {
UMA_HISTOGRAM_ENUMERATION("Web.URLVerificationFailure",
[self webViewDocumentType],
@@ -1054,11 +1063,9 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
[self setPageChangeProbability:web::PAGE_CHANGE_PROBABILITY_LOW];
// Default values for suppressDialogs and notifyAboutDialogs are NO,
// so updating them only when necessary is a good optimization.
- if (_setSuppressDialogsLater || _setNotifyAboutDialogsLater) {
- [self setSuppressDialogs:_setSuppressDialogsLater
- notify:_setNotifyAboutDialogsLater];
+ if (_setSuppressDialogsLater) {
+ [self setSuppressDialogs:YES];
_setSuppressDialogsLater = NO;
- _setNotifyAboutDialogsLater = NO;
}
[_windowIDJSManager inject];
@@ -2014,8 +2021,8 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
@selector(handleAddPluginPlaceholdersMessage:context:);
(*handlers)["chrome.send"] = @selector(handleChromeSendMessage:context:);
(*handlers)["console"] = @selector(handleConsoleMessage:context:);
- (*handlers)["dialog.suppressed"] =
- @selector(handleDialogSuppressedMessage:context:);
+ (*handlers)["geolocationDialog.suppressed"] =
+ @selector(handleGeolocationDialogSuppressedMessage:context:);
(*handlers)["document.favicons"] =
@selector(handleDocumentFaviconsMessage:context:);
(*handlers)["document.retitled"] =
@@ -2124,12 +2131,9 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
return YES;
}
-- (BOOL)handleDialogSuppressedMessage:(base::DictionaryValue*)message
- context:(NSDictionary*)context {
- if ([_delegate
- respondsToSelector:@selector(webControllerDidSuppressDialog:)]) {
- [_delegate webControllerDidSuppressDialog:self];
- }
+- (BOOL)handleGeolocationDialogSuppressedMessage:(base::DictionaryValue*)message
+ context:(NSDictionary*)context {
+ [self didSuppressDialog];
return YES;
}
@@ -3187,34 +3191,18 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
}
}
-- (void)internalSuppressDialogs:(BOOL)suppressFlag notify:(BOOL)notifyFlag {
- NSString* const kSetSuppressDialogs =
- [NSString stringWithFormat:@"__gCrWeb.setSuppressDialogs(%d, %d);",
- suppressFlag, notifyFlag];
- [self setSuppressDialogsWithHelperScript:kSetSuppressDialogs];
-}
-
- (void)setPageDialogOpenPolicy:(web::PageDialogOpenPolicy)policy {
switch (policy) {
case web::DIALOG_POLICY_ALLOW:
- [self setSuppressDialogs:NO notify:NO];
+ [self setSuppressDialogs:NO];
return;
case web::DIALOG_POLICY_SUPPRESS:
- [self setSuppressDialogs:YES notify:YES];
+ [self setSuppressDialogs:YES];
return;
}
NOTREACHED();
}
-- (void)setSuppressDialogs:(BOOL)suppressFlag notify:(BOOL)notifyFlag {
- if (self.webView && [_earlyScriptManager hasBeenInjected]) {
- [self internalSuppressDialogs:suppressFlag notify:notifyFlag];
- } else {
- _setSuppressDialogsLater = suppressFlag;
- _setNotifyAboutDialogsLater = notifyFlag;
- }
-}
-
#pragma mark -
#pragma mark Session Information
@@ -3618,6 +3606,11 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
linkClicked:linkClicked];
}
+- (void)didSuppressDialog {
+ if ([_delegate respondsToSelector:@selector(webControllerDidSuppressDialog:)])
+ [_delegate webControllerDidSuppressDialog:self];
+}
+
- (BOOL)isPutativeMainFrameRequest:(NSURLRequest*)request
targetFrame:(const web::FrameInfo*)targetFrame {
// Determine whether the request is for the main frame using frame info if

Powered by Google App Engine
This is Rietveld 408576698