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

Unified Diff: chrome/browser/ui/views/ash/tab_scrubber_browsertest.cc

Issue 2656983005: Fix the TabScrubber always starting from the first tab in full screen mode. (Closed)
Patch Set: sky's comments 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
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/immersive_mode_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/ash/tab_scrubber_browsertest.cc
diff --git a/chrome/browser/ui/views/ash/tab_scrubber_browsertest.cc b/chrome/browser/ui/views/ash/tab_scrubber_browsertest.cc
index 069af32cdc0335559311c4a2274378a8786588a0..59315a73e2259130fa83326de7f00f8122d5944e 100644
--- a/chrome/browser/ui/views/ash/tab_scrubber_browsertest.cc
+++ b/chrome/browser/ui/views/ash/tab_scrubber_browsertest.cc
@@ -8,10 +8,12 @@
#include "ash/display/event_transformation_handler.h"
#include "ash/shell.h"
+#include "base/callback_helpers.h"
#include "base/command_line.h"
#include "base/macros.h"
#include "base/run_loop.h"
#include "build/build_config.h"
+#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
@@ -33,6 +35,51 @@
namespace {
+// Waits until the immersive mode reveal ends, and therefore the top view of
+// the browser is no longer visible.
+class ImmersiveRevealEndedWaiter : public ImmersiveModeController::Observer {
+ public:
+ explicit ImmersiveRevealEndedWaiter(
+ ImmersiveModeController* immersive_controller)
+ : immersive_controller_(immersive_controller) {
+ immersive_controller_->AddObserver(this);
+ }
+
+ ~ImmersiveRevealEndedWaiter() override {
+ if (immersive_controller_)
+ immersive_controller_->RemoveObserver(this);
+ }
+
+ void Wait() {
+ if (!immersive_controller_ || !immersive_controller_->IsRevealed())
+ return;
+
+ base::RunLoop run_loop;
+ quit_closure_ = run_loop.QuitClosure();
+ run_loop.Run();
+ }
+
+ private:
+ void MaybeQuitRunLoop() {
+ if (!quit_closure_.is_null())
+ base::ResetAndReturn(&quit_closure_).Run();
+ }
+
+ // ImmersiveModeController::Observer:
+ void OnImmersiveRevealEnded() override { MaybeQuitRunLoop(); }
+
+ void OnImmersiveModeControllerDestroyed() override {
+ MaybeQuitRunLoop();
+ immersive_controller_->RemoveObserver(this);
+ immersive_controller_ = nullptr;
+ }
+
+ ImmersiveModeController* immersive_controller_;
+ base::Closure quit_closure_;
+
+ DISALLOW_COPY_AND_ASSIGN(ImmersiveRevealEndedWaiter);
+};
+
class TabScrubberTest : public InProcessBrowserTest,
public TabStripModelObserver {
public:
@@ -281,6 +328,33 @@ IN_PROC_BROWSER_TEST_F(TabScrubberTest, MultiBrowser) {
EXPECT_EQ(0, browser2->tab_strip_model()->active_index());
}
+// Tests that tab scrubbing works correctly for a full-screen browser.
+IN_PROC_BROWSER_TEST_F(TabScrubberTest, FullScreenBrowser) {
+ AddTabs(browser(), 6);
+ browser()->tab_strip_model()->ActivateTabAt(4, false);
+
+ chrome::ToggleFullscreenMode(browser());
+ BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(
+ browser()->window()->GetNativeWindow());
+ ImmersiveModeController* immersive_controller =
+ browser_view->immersive_mode_controller();
+ EXPECT_TRUE(immersive_controller->IsEnabled());
+
+ ImmersiveRevealEndedWaiter waiter(immersive_controller);
+ waiter.Wait();
+
+ EXPECT_FALSE(immersive_controller->IsRevealed());
+
+ EXPECT_EQ(4, browser()->tab_strip_model()->active_index());
+ Scrub(browser(), 0, EACH_TAB);
+ EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
+ EXPECT_EQ(4U, activation_order_.size());
+ EXPECT_EQ(3, activation_order_[0]);
+ EXPECT_EQ(2, activation_order_[1]);
+ EXPECT_EQ(1, activation_order_[2]);
+ EXPECT_EQ(0, activation_order_[3]);
+}
+
// Swipe 4 tabs in each direction with an extra swipe within each. The same
// 4 tabs should become active.
IN_PROC_BROWSER_TEST_F(TabScrubberTest, Repeated) {
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/immersive_mode_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698