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

Unified Diff: content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc

Issue 2698673006: Add User Actions and adding more details to UMA metrics for overscroll navigation (Closed)
Patch Set: Created 3 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
Index: content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
index 7263fb2e79c77c2191ad46b03694d9a463e86c7d..b4af20d0f07a9904aa246d6f7d8ff6088e1cd91d 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
@@ -9,7 +9,10 @@
#include <vector>
#include "base/macros.h"
+#include "base/test/histogram_tester.h"
+#include "base/test/user_action_tester.h"
#include "content/browser/frame_host/navigation_entry_impl.h"
+#include "content/browser/web_contents/aura/uma_navigation_type.h"
#include "content/browser/web_contents/web_contents_view.h"
#include "content/common/frame_messages.h"
#include "content/common/view_messages.h"
@@ -30,6 +33,18 @@
#include "ui/gfx/codec/png_codec.h"
namespace content {
+namespace {
+
+const char kUmaStarted[] = "Overscroll.Started3";
+const char kUmaCancelled[] = "Overscroll.Cancelled3";
+const char kUmaNavigated[] = "Overscroll.Navigated3";
+
+const char kActionCancelledBack[] = "Overscroll_Cancelled.Back";
+const char kActionCancelledForward[] = "Overscroll_Cancelled.Forward";
+const char kActionNavigatedBack[] = "Overscroll_Navigated.Back";
+const char kActionNavigatedForward[] = "Overscroll_Navigated.Forward";
+
+} // namespace
// Forces web contents to complete web page load as soon as navigation starts.
class ImmediateLoadObserver : WebContentsObserver {
@@ -140,21 +155,38 @@ class OverscrollNavigationOverlayTest : public RenderViewHostImplTestHarness {
RenderViewHostTester::TestOnMessageReceived(test_rvh(), msg);
}
- void PerformBackNavigationViaSliderCallbacks() {
+ void PerformBackNavigationViaSliderCallbacks(OverscrollSource source) {
// Sets slide direction to BACK, sets screenshot from NavEntry at
// offset -1 on layer_delegate_.
+ GetOverlay()->owa_->SetOverscrollSourceForTesting(source);
std::unique_ptr<aura::Window> window(
GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds()));
bool window_created = !!window;
- // Performs BACK navigation, sets image from layer_delegate_ on
- // image_delegate_.
- GetOverlay()->OnOverscrollCompleting();
- if (window_created)
+ if (window_created) {
+ histogram_tester()->ExpectTotalCount(kUmaStarted, 1);
+ histogram_tester()->ExpectBucketCount(
+ kUmaStarted,
+ source == OVERSCROLL_TOUCHPAD ? BACK_TOUCHPAD : BACK_TOUCHSCREEN, 1);
EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK);
- else
+ // Performs BACK navigation, sets image from layer_delegate_ on
+ // image_delegate_.
+ GetOverlay()->OnOverscrollCompleting();
+ window->SetBounds(gfx::Rect(root_window()->bounds().size()));
+
+ histogram_tester()->ExpectTotalCount(kUmaNavigated, 0);
+ EXPECT_EQ(0, action_tester()->GetActionCount(kActionNavigatedBack));
+
+ GetOverlay()->OnOverscrollCompleted(std::move(window));
+ histogram_tester()->ExpectTotalCount(kUmaNavigated, 1);
+ histogram_tester()->ExpectBucketCount(
+ kUmaNavigated,
+ source == OVERSCROLL_TOUCHPAD ? BACK_TOUCHPAD : BACK_TOUCHSCREEN, 1);
+ EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedBack));
+ } else {
EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE);
- window->SetBounds(gfx::Rect(root_window()->bounds().size()));
- GetOverlay()->OnOverscrollCompleted(std::move(window));
+ histogram_tester()->ExpectTotalCount(kUmaStarted, 0);
+ }
+ GetOverlay()->owa_->SetOverscrollSourceForTesting(OVERSCROLL_SOURCE_NONE);
if (IsBrowserSideNavigationEnabled())
main_test_rfh()->PrepareForCommit();
else
@@ -181,11 +213,17 @@ class OverscrollNavigationOverlayTest : public RenderViewHostImplTestHarness {
const GURL third() { return third_; }
const GURL fourth() { return fourth_; }
+ base::HistogramTester* histogram_tester() { return histogram_tester_.get(); }
+ base::UserActionTester* action_tester() { return action_tester_.get(); }
+
protected:
// RenderViewHostImplTestHarness:
void SetUp() override {
RenderViewHostImplTestHarness::SetUp();
+ histogram_tester_.reset(new base::HistogramTester);
+ action_tester_.reset(new base::UserActionTester);
+
// Set up the fake web contents native view.
std::unique_ptr<aura::Window> fake_native_view(new aura::Window(nullptr));
fake_native_view->Init(ui::LAYER_SOLID_COLOR);
@@ -249,6 +287,9 @@ class OverscrollNavigationOverlayTest : public RenderViewHostImplTestHarness {
const GURL third_;
const GURL fourth_;
+ std::unique_ptr<base::HistogramTester> histogram_tester_;
+ std::unique_ptr<base::UserActionTester> action_tester_;
+
std::unique_ptr<OverscrollNavigationOverlay> overlay_;
DISALLOW_COPY_AND_ASSIGN(OverscrollNavigationOverlayTest);
@@ -258,7 +299,7 @@ class OverscrollNavigationOverlayTest : public RenderViewHostImplTestHarness {
// delegate.
TEST_F(OverscrollNavigationOverlayTest, WithScreenshot) {
SetDummyScreenshotOnNavEntry(controller().GetEntryAtOffset(-1));
- PerformBackNavigationViaSliderCallbacks();
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHPAD);
// Screenshot was set on NavEntry at offset -1.
EXPECT_TRUE(static_cast<aura_extra::ImageWindowDelegate*>(
GetOverlay()->window_->delegate())->has_image());
@@ -267,7 +308,7 @@ TEST_F(OverscrollNavigationOverlayTest, WithScreenshot) {
// Tests that if a screenshot is not available, no image is set in the overlay
// window delegate.
TEST_F(OverscrollNavigationOverlayTest, WithoutScreenshot) {
- PerformBackNavigationViaSliderCallbacks();
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHSCREEN);
// No screenshot was set on NavEntry at offset -1.
EXPECT_FALSE(static_cast<aura_extra::ImageWindowDelegate*>(
GetOverlay()->window_->delegate())->has_image());
@@ -283,25 +324,83 @@ TEST_F(OverscrollNavigationOverlayTest, CannotNavigate) {
// Tests that if a navigation is cancelled, no navigation is performed and the
// state is restored.
TEST_F(OverscrollNavigationOverlayTest, CancelNavigation) {
+ GetOverlay()->owa_->SetOverscrollSourceForTesting(OVERSCROLL_TOUCHSCREEN);
std::unique_ptr<aura::Window> window =
GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds());
EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK);
+ histogram_tester()->ExpectTotalCount(kUmaCancelled, 0);
+ EXPECT_EQ(0, action_tester()->GetActionCount(kActionCancelledBack));
+
GetOverlay()->OnOverscrollCancelled();
EXPECT_FALSE(contents()->CrossProcessNavigationPending());
EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE);
+ histogram_tester()->ExpectTotalCount(kUmaCancelled, 1);
+ histogram_tester()->ExpectBucketCount(kUmaCancelled, BACK_TOUCHSCREEN, 1);
+ EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledBack));
+}
+
+TEST_F(OverscrollNavigationOverlayTest, ForwardNavigation) {
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHPAD);
+
+ GetOverlay()->owa_->SetOverscrollSourceForTesting(OVERSCROLL_TOUCHPAD);
+ std::unique_ptr<aura::Window> window =
+ GetOverlay()->CreateFrontWindow(GetBackSlideWindowBounds());
+ EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::FORWARD);
+ histogram_tester()->ExpectTotalCount(kUmaStarted, 2);
+ histogram_tester()->ExpectBucketCount(kUmaStarted, FORWARD_TOUCHPAD, 1);
+
+ GetOverlay()->OnOverscrollCompleting();
+ histogram_tester()->ExpectTotalCount(kUmaNavigated, 1);
+ EXPECT_EQ(0, action_tester()->GetActionCount(kActionNavigatedForward));
+
+ GetOverlay()->OnOverscrollCompleted(std::move(window));
+ histogram_tester()->ExpectTotalCount(kUmaNavigated, 2);
+ histogram_tester()->ExpectBucketCount(kUmaNavigated, FORWARD_TOUCHPAD, 1);
+ EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedForward));
+
+ EXPECT_TRUE(contents()->CrossProcessNavigationPending());
+}
+
+TEST_F(OverscrollNavigationOverlayTest, ForwardNavigationCancelled) {
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHPAD);
+
+ GetOverlay()->owa_->SetOverscrollSourceForTesting(OVERSCROLL_TOUCHSCREEN);
+ std::unique_ptr<aura::Window> window =
+ GetOverlay()->CreateFrontWindow(GetBackSlideWindowBounds());
+ EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::FORWARD);
+ histogram_tester()->ExpectTotalCount(kUmaStarted, 2);
+ histogram_tester()->ExpectBucketCount(kUmaStarted, FORWARD_TOUCHSCREEN, 1);
+
+ histogram_tester()->ExpectTotalCount(kUmaCancelled, 0);
+ EXPECT_EQ(0, action_tester()->GetActionCount(kActionCancelledForward));
+
+ GetOverlay()->OnOverscrollCancelled();
+ EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE);
+ histogram_tester()->ExpectTotalCount(kUmaCancelled, 1);
+ histogram_tester()->ExpectBucketCount(kUmaCancelled, FORWARD_TOUCHSCREEN, 1);
+ EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledForward));
}
// Performs two navigations. The second navigation is cancelled, tests that the
// first one worked correctly.
TEST_F(OverscrollNavigationOverlayTest, CancelAfterSuccessfulNavigation) {
- PerformBackNavigationViaSliderCallbacks();
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHPAD);
+ GetOverlay()->owa_->SetOverscrollSourceForTesting(OVERSCROLL_TOUCHPAD);
std::unique_ptr<aura::Window> wrapper =
GetOverlay()->CreateBackWindow(GetBackSlideWindowBounds());
EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK);
+ histogram_tester()->ExpectTotalCount(kUmaStarted, 2);
+ histogram_tester()->ExpectBucketCount(kUmaStarted, BACK_TOUCHPAD, 2);
GetOverlay()->OnOverscrollCancelled();
EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::NONE);
+ histogram_tester()->ExpectTotalCount(kUmaCancelled, 1);
+ histogram_tester()->ExpectBucketCount(kUmaCancelled, BACK_TOUCHPAD, 1);
+ EXPECT_EQ(1, action_tester()->GetActionCount(kActionCancelledBack));
+ // Navigation metrics shouldn't change.
+ histogram_tester()->ExpectTotalCount(kUmaNavigated, 1);
+ EXPECT_EQ(1, action_tester()->GetActionCount(kActionNavigatedBack));
EXPECT_TRUE(contents()->CrossProcessNavigationPending());
NavigationEntry* pending = contents()->GetController().GetPendingEntry();
@@ -313,7 +412,7 @@ TEST_F(OverscrollNavigationOverlayTest, CancelAfterSuccessfulNavigation) {
// Tests that an overscroll navigation that receives a paint update actually
// stops observing.
TEST_F(OverscrollNavigationOverlayTest, Navigation_PaintUpdate) {
- PerformBackNavigationViaSliderCallbacks();
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHSCREEN);
ReceivePaintUpdate();
// Paint updates until the navigation is committed typically represent updates
@@ -334,7 +433,7 @@ TEST_F(OverscrollNavigationOverlayTest, Navigation_PaintUpdate) {
// Tests that an overscroll navigation that receives a loading update actually
// stops observing.
TEST_F(OverscrollNavigationOverlayTest, Navigation_LoadingUpdate) {
- PerformBackNavigationViaSliderCallbacks();
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHPAD);
EXPECT_TRUE(GetOverlay()->web_contents());
// DidStopLoading for any navigation should always reset the load flag and
// dismiss the overlay even if the pending navigation wasn't committed -
@@ -352,7 +451,8 @@ TEST_F(OverscrollNavigationOverlayTest, Navigation_LoadingUpdate) {
TEST_F(OverscrollNavigationOverlayTest, CloseDuringAnimation) {
ui::ScopedAnimationDurationScaleMode normal_duration_(
ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
- GetOverlay()->owa_->OnOverscrollModeChange(OVERSCROLL_NONE, OVERSCROLL_EAST);
+ GetOverlay()->owa_->OnOverscrollModeChange(OVERSCROLL_NONE, OVERSCROLL_EAST,
+ OVERSCROLL_TOUCHSCREEN);
GetOverlay()->owa_->OnOverscrollComplete(OVERSCROLL_EAST);
EXPECT_EQ(GetOverlay()->direction_, OverscrollNavigationOverlay::BACK);
OverscrollTestWebContents* test_web_contents =
@@ -366,21 +466,25 @@ TEST_F(OverscrollNavigationOverlayTest, CloseDuringAnimation) {
// Tests that we can handle the case when the load completes as soon as the
// navigation is started.
TEST_F(OverscrollNavigationOverlayTest, ImmediateLoadOnNavigate) {
- PerformBackNavigationViaSliderCallbacks();
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHPAD);
// This observer will force the page load to complete as soon as the
// navigation starts.
ImmediateLoadObserver immediate_nav(contents());
- GetOverlay()->owa_->OnOverscrollModeChange(OVERSCROLL_NONE, OVERSCROLL_EAST);
+ GetOverlay()->owa_->OnOverscrollModeChange(OVERSCROLL_NONE, OVERSCROLL_EAST,
+ OVERSCROLL_TOUCHPAD);
// This will start and immediately complete the navigation.
GetOverlay()->owa_->OnOverscrollComplete(OVERSCROLL_EAST);
EXPECT_FALSE(GetOverlay()->window_.get());
+ histogram_tester()->ExpectTotalCount(kUmaNavigated, 2);
+ histogram_tester()->ExpectBucketCount(kUmaNavigated, BACK_TOUCHPAD, 2);
+ EXPECT_EQ(2, action_tester()->GetActionCount(kActionNavigatedBack));
}
// Tests that swapping the overlay window at the end of a gesture caused by the
// start of a new overscroll does not crash and the events still reach the new
// overlay window.
TEST_F(OverscrollNavigationOverlayTest, OverlayWindowSwap) {
- PerformBackNavigationViaSliderCallbacks();
+ PerformBackNavigationViaSliderCallbacks(OVERSCROLL_TOUCHPAD);
aura::Window* first_overlay_window = GetOverlay()->window_.get();
EXPECT_TRUE(GetOverlay()->web_contents());
EXPECT_TRUE(first_overlay_window);

Powered by Google App Engine
This is Rietveld 408576698