app_shell: Add version number in user agent
[chromium-blink-merge.git] / chrome / browser / ui / tabs / hover_tab_selector.cc
blobff840d12d9b5808c37f887efe6c90ce6f97cb355
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/tabs/hover_tab_selector.h"
7 #include "base/bind.h"
8 #include "base/compiler_specific.h"
9 #include "base/message_loop/message_loop.h"
10 #include "chrome/browser/ui/tabs/tab_strip_model.h"
12 HoverTabSelector::HoverTabSelector(
13 TabStripModel* tab_strip_model)
14 : tab_strip_model_(tab_strip_model),
15 tab_transition_tab_index_(-1),
16 weak_factory_(this) {
17 DCHECK(tab_strip_model_);
20 HoverTabSelector::~HoverTabSelector() {
23 void HoverTabSelector::StartTabTransition(int index) {
24 // If there is a transition underway already, only start a new
25 // transition (canceling the old one) if the target tab differs.
26 if (weak_factory_.HasWeakPtrs()) {
27 if (index == tab_transition_tab_index_)
28 return;
29 CancelTabTransition();
31 // Start a new transition if the target isn't active already.
32 if (index != tab_strip_model_->active_index()) {
33 // The delay between beginning to hover over a tab and the transition
34 // to that tab taking place.
35 const base::TimeDelta kHoverTransitionDelay =
36 base::TimeDelta::FromMilliseconds(500);
37 tab_transition_tab_index_ = index;
38 base::MessageLoop::current()->PostDelayedTask(
39 FROM_HERE,
40 base::Bind(&HoverTabSelector::PerformTabTransition,
41 weak_factory_.GetWeakPtr()),
42 kHoverTransitionDelay);
46 void HoverTabSelector::CancelTabTransition() {
47 weak_factory_.InvalidateWeakPtrs();
50 void HoverTabSelector::PerformTabTransition() {
51 DCHECK(tab_transition_tab_index_ >= 0 &&
52 tab_transition_tab_index_ < tab_strip_model_->count());
53 tab_strip_model_->ActivateTabAt(tab_transition_tab_index_, true);