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

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

Issue 1610143002: Adds UMA for slow and fast back/forward WKWebController navigations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Factored out logic to a helper. Added an early return. Created 4 years, 10 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 | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
diff --git a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
index de29b293c2da896d3da9b639632678324333a1ba..e2d18a492604db1f08047168fd73660d2b4d10f4 100644
--- a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
+++ b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
@@ -89,6 +89,23 @@ NSString* GetRefererFromNavigationAction(WKNavigationAction* action) {
NSString* const kScriptMessageName = @"crwebinvoke";
NSString* const kScriptImmediateName = @"crwebinvokeimmediate";
+// Key of the UMA Navigation.IOSWKWebViewSlowFastBackForward histogram.
+const char kUMAWKWebViewSlowFastBackForwardNavigationKey[] =
+ "Navigation.IOSWKWebViewSlowFastBackForward";
+
+// Values for the histogram that counts slow/fast back/forward navigations.
+enum BackForwardNavigationType {
+ // Fast back navigation through WKWebView back-forward list.
+ FAST_BACK = 0,
+ // Slow back navigation when back-forward list navigation is not possible.
+ SLOW_BACK,
+ // Fast forward navigation through WKWebView back-forward list.
+ FAST_FORWARD,
+ // Slow forward navigation when back-forward list navigation is not possible.
+ SLOW_FORWARD,
+ BACK_FORWARD_NAVIGATION_TYPE_COUNT
+};
+
// Utility functions for storing the source of NSErrors received by WKWebViews:
// - Errors received by |-webView:didFailProvisionalNavigation:withError:| are
// recorded using WKWebViewErrorSource::PROVISIONAL_LOAD. These should be
@@ -298,6 +315,12 @@ WKWebViewErrorSource WKWebViewErrorSourceFromError(NSError* error) {
// navigation.
- (BOOL)isBackForwardListItemValid:(WKBackForwardListItem*)item;
+// Indicates if navigating using WKBackForwardList API is possible.
+// Returns YES if there is a corresponding WKBackForwardListItem and it is in
+// the current WKWebView's back-forward list.
+- (BOOL)isNavigationPerformedWithBackForwardList:
+ (web::WKBackForwardListItemHolder*)holder;
+
// Called when web view process has been terminated.
- (void)webViewWebProcessDidCrash;
@@ -473,6 +496,33 @@ WKWebViewErrorSource WKWebViewErrorSourceFromError(NSError* error) {
[super stopLoading];
}
+- (void)goDelta:(int)delta {
+ [super goDelta:delta];
+ if (delta == 0)
+ return;
+
+ // Report slow/fast navigation metric.
+ web::WKBackForwardListItemHolder* holder =
+ web::WKBackForwardListItemHolder::FromNavigationItem(
+ self.currentSessionEntry.navigationItemImpl);
+ BOOL isFast = [self isNavigationPerformedWithBackForwardList:holder];
+ BOOL isBack = (delta < 0);
+
+ BackForwardNavigationType navigationType =
+ BackForwardNavigationType::FAST_BACK;
+ if (isBack) {
+ navigationType = isFast ? BackForwardNavigationType::FAST_BACK
+ : BackForwardNavigationType::SLOW_BACK;
+ } else {
+ navigationType = isFast ? BackForwardNavigationType::FAST_FORWARD
+ : BackForwardNavigationType::SLOW_FORWARD;
+ }
+
+ UMA_HISTOGRAM_ENUMERATION(
+ kUMAWKWebViewSlowFastBackForwardNavigationKey, navigationType,
+ BackForwardNavigationType::BACK_FORWARD_NAVIGATION_TYPE_COUNT);
+}
+
#pragma mark -
#pragma mark Testing-Only Methods
@@ -619,12 +669,9 @@ WKWebViewErrorSource WKWebViewErrorSourceFromError(NSError* error) {
[self loadRequest:request];
};
- // If there is no corresponding WKBackForwardListItem, or the item is not in
- // the current WKWebView's back-forward list, navigating using WKWebView API
- // is not possible. In this case, fall back to the default navigation
- // mechanism.
- if (!holder->back_forward_list_item() ||
- ![self isBackForwardListItemValid:holder->back_forward_list_item()]) {
+ // If the fast navigation with WKBackForwardList is not possible, fall back to
+ // the default navigation mechanism.
+ if ([self isNavigationPerformedWithBackForwardList:holder]) {
defaultNavigationBlock();
return;
}
@@ -948,6 +995,12 @@ WKWebViewErrorSource WKWebViewErrorSourceFromError(NSError* error) {
[list.backList indexOfObject:item] != NSNotFound;
}
+- (BOOL)isNavigationPerformedWithBackForwardList:
+ (web::WKBackForwardListItemHolder*)holder {
+ return (holder->back_forward_list_item() &&
+ [self isBackForwardListItemValid:holder->back_forward_list_item()]);
+}
+
- (void)webViewWebProcessDidCrash {
_webProcessIsDead = YES;
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698