| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/tabs/media_indicator_button.h" | 5 #include "chrome/browser/ui/views/tabs/alert_indicator_button.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "chrome/browser/ui/views/tabs/tab.h" | 8 #include "chrome/browser/ui/views/tabs/tab.h" |
| 9 #include "chrome/browser/ui/views/tabs/tab_controller.h" | 9 #include "chrome/browser/ui/views/tabs/tab_controller.h" |
| 10 #include "chrome/browser/ui/views/tabs/tab_renderer_data.h" | 10 #include "chrome/browser/ui/views/tabs/tab_renderer_data.h" |
| 11 #include "content/public/browser/user_metrics.h" | 11 #include "content/public/browser/user_metrics.h" |
| 12 #include "ui/gfx/animation/animation_delegate.h" | 12 #include "ui/gfx/animation/animation_delegate.h" |
| 13 #include "ui/gfx/canvas.h" | 13 #include "ui/gfx/canvas.h" |
| 14 #include "ui/gfx/image/image.h" | 14 #include "ui/gfx/image/image.h" |
| 15 | 15 |
| 16 using base::UserMetricsAction; | 16 using base::UserMetricsAction; |
| 17 | 17 |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 // The minimum required click-to-select area of an inactive Tab before allowing | 20 // The minimum required click-to-select area of an inactive Tab before allowing |
| 21 // the click-to-mute functionality to be enabled. These values are in terms of | 21 // the click-to-mute functionality to be enabled. These values are in terms of |
| 22 // some percentage of the MediaIndicatorButton's width. See comments in | 22 // some percentage of the AlertIndicatorButton's width. See comments in |
| 23 // UpdateEnabledForMuteToggle(). | 23 // UpdateEnabledForMuteToggle(). |
| 24 const int kMinMouseSelectableAreaPercent = 250; | 24 const int kMinMouseSelectableAreaPercent = 250; |
| 25 const int kMinGestureSelectableAreaPercent = 400; | 25 const int kMinGestureSelectableAreaPercent = 400; |
| 26 | 26 |
| 27 // Returns true if either Shift or Control are being held down. In this case, | 27 // Returns true if either Shift or Control are being held down. In this case, |
| 28 // mouse events are delegated to the Tab, to perform tab selection in the tab | 28 // mouse events are delegated to the Tab, to perform tab selection in the tab |
| 29 // strip instead. | 29 // strip instead. |
| 30 bool IsShiftOrControlDown(const ui::Event& event) { | 30 bool IsShiftOrControlDown(const ui::Event& event) { |
| 31 return (event.flags() & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN)) != 0; | 31 return (event.flags() & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN)) != 0; |
| 32 } | 32 } |
| 33 | 33 |
| 34 } // namespace | 34 } // namespace |
| 35 | 35 |
| 36 const char MediaIndicatorButton::kViewClassName[] = "MediaIndicatorButton"; | 36 const char AlertIndicatorButton::kViewClassName[] = "AlertIndicatorButton"; |
| 37 | 37 |
| 38 class MediaIndicatorButton::FadeAnimationDelegate | 38 class AlertIndicatorButton::FadeAnimationDelegate |
| 39 : public gfx::AnimationDelegate { | 39 : public gfx::AnimationDelegate { |
| 40 public: | 40 public: |
| 41 explicit FadeAnimationDelegate(MediaIndicatorButton* button) | 41 explicit FadeAnimationDelegate(AlertIndicatorButton* button) |
| 42 : button_(button) {} | 42 : button_(button) {} |
| 43 ~FadeAnimationDelegate() override {} | 43 ~FadeAnimationDelegate() override {} |
| 44 | 44 |
| 45 private: | 45 private: |
| 46 // gfx::AnimationDelegate | 46 // gfx::AnimationDelegate |
| 47 void AnimationProgressed(const gfx::Animation* animation) override { | 47 void AnimationProgressed(const gfx::Animation* animation) override { |
| 48 button_->SchedulePaint(); | 48 button_->SchedulePaint(); |
| 49 } | 49 } |
| 50 | 50 |
| 51 void AnimationCanceled(const gfx::Animation* animation) override { | 51 void AnimationCanceled(const gfx::Animation* animation) override { |
| 52 AnimationEnded(animation); | 52 AnimationEnded(animation); |
| 53 } | 53 } |
| 54 | 54 |
| 55 void AnimationEnded(const gfx::Animation* animation) override { | 55 void AnimationEnded(const gfx::Animation* animation) override { |
| 56 button_->showing_media_state_ = button_->media_state_; | 56 button_->showing_alert_state_ = button_->alert_state_; |
| 57 button_->parent_tab_->MediaStateChanged(); | 57 button_->parent_tab_->AlertStateChanged(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 MediaIndicatorButton* const button_; | 60 AlertIndicatorButton* const button_; |
| 61 | 61 |
| 62 DISALLOW_COPY_AND_ASSIGN(FadeAnimationDelegate); | 62 DISALLOW_COPY_AND_ASSIGN(FadeAnimationDelegate); |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 MediaIndicatorButton::MediaIndicatorButton(Tab* parent_tab) | 65 AlertIndicatorButton::AlertIndicatorButton(Tab* parent_tab) |
| 66 : views::ImageButton(NULL), | 66 : views::ImageButton(NULL), |
| 67 parent_tab_(parent_tab), | 67 parent_tab_(parent_tab), |
| 68 media_state_(TAB_MEDIA_STATE_NONE), | 68 alert_state_(TabAlertState::NONE), |
| 69 showing_media_state_(TAB_MEDIA_STATE_NONE) { | 69 showing_alert_state_(TabAlertState::NONE) { |
| 70 DCHECK(parent_tab_); | 70 DCHECK(parent_tab_); |
| 71 SetEventTargeter( | 71 SetEventTargeter( |
| 72 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); | 72 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); |
| 73 } | 73 } |
| 74 | 74 |
| 75 MediaIndicatorButton::~MediaIndicatorButton() {} | 75 AlertIndicatorButton::~AlertIndicatorButton() {} |
| 76 | 76 |
| 77 void MediaIndicatorButton::TransitionToMediaState(TabMediaState next_state) { | 77 void AlertIndicatorButton::TransitionToAlertState(TabAlertState next_state) { |
| 78 if (next_state == media_state_) | 78 if (next_state == alert_state_) |
| 79 return; | 79 return; |
| 80 | 80 |
| 81 TabMediaState previous_media_showing_state = showing_media_state_; | 81 TabAlertState previous_alert_showing_state = showing_alert_state_; |
| 82 | 82 |
| 83 if (next_state != TAB_MEDIA_STATE_NONE) | 83 if (next_state != TabAlertState::NONE) |
| 84 ResetImages(next_state); | 84 ResetImages(next_state); |
| 85 | 85 |
| 86 if ((media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING && | 86 if ((alert_state_ == TabAlertState::AUDIO_PLAYING && |
| 87 next_state == TAB_MEDIA_STATE_AUDIO_MUTING) || | 87 next_state == TabAlertState::AUDIO_MUTING) || |
| 88 (media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING && | 88 (alert_state_ == TabAlertState::AUDIO_MUTING && |
| 89 next_state == TAB_MEDIA_STATE_AUDIO_PLAYING) || | 89 next_state == TabAlertState::AUDIO_PLAYING) || |
| 90 (media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING && | 90 (alert_state_ == TabAlertState::AUDIO_MUTING && |
| 91 next_state == TAB_MEDIA_STATE_NONE)) { | 91 next_state == TabAlertState::NONE)) { |
| 92 // Instant user feedback: No fade animation. | 92 // Instant user feedback: No fade animation. |
| 93 showing_media_state_ = next_state; | 93 showing_alert_state_ = next_state; |
| 94 fade_animation_.reset(); | 94 fade_animation_.reset(); |
| 95 } else { | 95 } else { |
| 96 if (next_state == TAB_MEDIA_STATE_NONE) | 96 if (next_state == TabAlertState::NONE) |
| 97 showing_media_state_ = media_state_; // Fading-out indicator. | 97 showing_alert_state_ = alert_state_; // Fading-out indicator. |
| 98 else | 98 else |
| 99 showing_media_state_ = next_state; // Fading-in to next indicator. | 99 showing_alert_state_ = next_state; // Fading-in to next indicator. |
| 100 fade_animation_ = chrome::CreateTabMediaIndicatorFadeAnimation(next_state); | 100 fade_animation_ = chrome::CreateTabAlertIndicatorFadeAnimation(next_state); |
| 101 if (!fade_animation_delegate_) | 101 if (!fade_animation_delegate_) |
| 102 fade_animation_delegate_.reset(new FadeAnimationDelegate(this)); | 102 fade_animation_delegate_.reset(new FadeAnimationDelegate(this)); |
| 103 fade_animation_->set_delegate(fade_animation_delegate_.get()); | 103 fade_animation_->set_delegate(fade_animation_delegate_.get()); |
| 104 fade_animation_->Start(); | 104 fade_animation_->Start(); |
| 105 } | 105 } |
| 106 | 106 |
| 107 media_state_ = next_state; | 107 alert_state_ = next_state; |
| 108 | 108 |
| 109 if (previous_media_showing_state != showing_media_state_) | 109 if (previous_alert_showing_state != showing_alert_state_) |
| 110 parent_tab_->MediaStateChanged(); | 110 parent_tab_->AlertStateChanged(); |
| 111 | 111 |
| 112 UpdateEnabledForMuteToggle(); | 112 UpdateEnabledForMuteToggle(); |
| 113 | 113 |
| 114 // An indicator state change should be made visible immediately, instead of | 114 // An indicator state change should be made visible immediately, instead of |
| 115 // the user being surprised when their mouse leaves the button. | 115 // the user being surprised when their mouse leaves the button. |
| 116 if (state() == views::CustomButton::STATE_HOVERED) { | 116 if (state() == views::CustomButton::STATE_HOVERED) { |
| 117 SetState(enabled() ? views::CustomButton::STATE_NORMAL : | 117 SetState(enabled() ? views::CustomButton::STATE_NORMAL |
| 118 views::CustomButton::STATE_DISABLED); | 118 : views::CustomButton::STATE_DISABLED); |
| 119 } | 119 } |
| 120 | 120 |
| 121 // Note: The calls to SetImage(), SetEnabled(), and SetState() above will call | 121 // Note: The calls to SetImage(), SetEnabled(), and SetState() above will call |
| 122 // SchedulePaint() if necessary. | 122 // SchedulePaint() if necessary. |
| 123 } | 123 } |
| 124 | 124 |
| 125 void MediaIndicatorButton::UpdateEnabledForMuteToggle() { | 125 void AlertIndicatorButton::UpdateEnabledForMuteToggle() { |
| 126 bool enable = chrome::AreExperimentalMuteControlsEnabled() && | 126 bool enable = chrome::AreExperimentalMuteControlsEnabled() && |
| 127 (media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING || | 127 (alert_state_ == TabAlertState::AUDIO_PLAYING || |
| 128 media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING); | 128 alert_state_ == TabAlertState::AUDIO_MUTING); |
| 129 | 129 |
| 130 // If the tab is not the currently-active tab, make sure it is wide enough | 130 // If the tab is not the currently-active tab, make sure it is wide enough |
| 131 // before enabling click-to-mute. This ensures that there is enough click | 131 // before enabling click-to-mute. This ensures that there is enough click |
| 132 // area for the user to activate a tab rather than unintentionally muting it. | 132 // area for the user to activate a tab rather than unintentionally muting it. |
| 133 // Note that IsTriggerableEvent() is also overridden to provide an even wider | 133 // Note that IsTriggerableEvent() is also overridden to provide an even wider |
| 134 // requirement for tap gestures. | 134 // requirement for tap gestures. |
| 135 if (enable && !GetTab()->IsActive()) { | 135 if (enable && !GetTab()->IsActive()) { |
| 136 const int required_width = width() * kMinMouseSelectableAreaPercent / 100; | 136 const int required_width = width() * kMinMouseSelectableAreaPercent / 100; |
| 137 enable = (GetTab()->GetWidthOfLargestSelectableRegion() >= required_width); | 137 enable = (GetTab()->GetWidthOfLargestSelectableRegion() >= required_width); |
| 138 } | 138 } |
| 139 | 139 |
| 140 SetEnabled(enable); | 140 SetEnabled(enable); |
| 141 } | 141 } |
| 142 | 142 |
| 143 void MediaIndicatorButton::OnParentTabButtonColorChanged() { | 143 void AlertIndicatorButton::OnParentTabButtonColorChanged() { |
| 144 if (media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING || | 144 if (alert_state_ == TabAlertState::AUDIO_PLAYING || |
| 145 media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING) | 145 alert_state_ == TabAlertState::AUDIO_MUTING) |
| 146 ResetImages(media_state_); | 146 ResetImages(alert_state_); |
| 147 } | 147 } |
| 148 | 148 |
| 149 const char* MediaIndicatorButton::GetClassName() const { | 149 const char* AlertIndicatorButton::GetClassName() const { |
| 150 return kViewClassName; | 150 return kViewClassName; |
| 151 } | 151 } |
| 152 | 152 |
| 153 views::View* MediaIndicatorButton::GetTooltipHandlerForPoint( | 153 views::View* AlertIndicatorButton::GetTooltipHandlerForPoint( |
| 154 const gfx::Point& point) { | 154 const gfx::Point& point) { |
| 155 return NULL; // Tab (the parent View) provides the tooltip. | 155 return NULL; // Tab (the parent View) provides the tooltip. |
| 156 } | 156 } |
| 157 | 157 |
| 158 bool MediaIndicatorButton::OnMousePressed(const ui::MouseEvent& event) { | 158 bool AlertIndicatorButton::OnMousePressed(const ui::MouseEvent& event) { |
| 159 // Do not handle this mouse event when anything but the left mouse button is | 159 // Do not handle this mouse event when anything but the left mouse button is |
| 160 // pressed or when any modifier keys are being held down. Instead, the Tab | 160 // pressed or when any modifier keys are being held down. Instead, the Tab |
| 161 // should react (e.g., middle-click for close, right-click for context menu). | 161 // should react (e.g., middle-click for close, right-click for context menu). |
| 162 if (!event.IsOnlyLeftMouseButton() || IsShiftOrControlDown(event)) { | 162 if (!event.IsOnlyLeftMouseButton() || IsShiftOrControlDown(event)) { |
| 163 if (state() != views::CustomButton::STATE_DISABLED) | 163 if (state() != views::CustomButton::STATE_DISABLED) |
| 164 SetState(views::CustomButton::STATE_NORMAL); // Turn off hover. | 164 SetState(views::CustomButton::STATE_NORMAL); // Turn off hover. |
| 165 return false; // Event to be handled by Tab. | 165 return false; // Event to be handled by Tab. |
| 166 } | 166 } |
| 167 return ImageButton::OnMousePressed(event); | 167 return ImageButton::OnMousePressed(event); |
| 168 } | 168 } |
| 169 | 169 |
| 170 bool MediaIndicatorButton::OnMouseDragged(const ui::MouseEvent& event) { | 170 bool AlertIndicatorButton::OnMouseDragged(const ui::MouseEvent& event) { |
| 171 const ButtonState previous_state = state(); | 171 const ButtonState previous_state = state(); |
| 172 const bool ret = ImageButton::OnMouseDragged(event); | 172 const bool ret = ImageButton::OnMouseDragged(event); |
| 173 if (previous_state != views::CustomButton::STATE_NORMAL && | 173 if (previous_state != views::CustomButton::STATE_NORMAL && |
| 174 state() == views::CustomButton::STATE_NORMAL) | 174 state() == views::CustomButton::STATE_NORMAL) |
| 175 content::RecordAction(UserMetricsAction("MediaIndicatorButton_Dragged")); | 175 content::RecordAction(UserMetricsAction("AlertIndicatorButton_Dragged")); |
| 176 return ret; | 176 return ret; |
| 177 } | 177 } |
| 178 | 178 |
| 179 void MediaIndicatorButton::OnMouseEntered(const ui::MouseEvent& event) { | 179 void AlertIndicatorButton::OnMouseEntered(const ui::MouseEvent& event) { |
| 180 // If any modifier keys are being held down, do not turn on hover. | 180 // If any modifier keys are being held down, do not turn on hover. |
| 181 if (state() != views::CustomButton::STATE_DISABLED && | 181 if (state() != views::CustomButton::STATE_DISABLED && |
| 182 IsShiftOrControlDown(event)) { | 182 IsShiftOrControlDown(event)) { |
| 183 SetState(views::CustomButton::STATE_NORMAL); | 183 SetState(views::CustomButton::STATE_NORMAL); |
| 184 return; | 184 return; |
| 185 } | 185 } |
| 186 ImageButton::OnMouseEntered(event); | 186 ImageButton::OnMouseEntered(event); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void MediaIndicatorButton::OnMouseMoved(const ui::MouseEvent& event) { | 189 void AlertIndicatorButton::OnMouseMoved(const ui::MouseEvent& event) { |
| 190 // If any modifier keys are being held down, turn off hover. | 190 // If any modifier keys are being held down, turn off hover. |
| 191 if (state() != views::CustomButton::STATE_DISABLED && | 191 if (state() != views::CustomButton::STATE_DISABLED && |
| 192 IsShiftOrControlDown(event)) { | 192 IsShiftOrControlDown(event)) { |
| 193 SetState(views::CustomButton::STATE_NORMAL); | 193 SetState(views::CustomButton::STATE_NORMAL); |
| 194 return; | 194 return; |
| 195 } | 195 } |
| 196 ImageButton::OnMouseMoved(event); | 196 ImageButton::OnMouseMoved(event); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void MediaIndicatorButton::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 199 void AlertIndicatorButton::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
| 200 UpdateEnabledForMuteToggle(); | 200 UpdateEnabledForMuteToggle(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void MediaIndicatorButton::OnPaint(gfx::Canvas* canvas) { | 203 void AlertIndicatorButton::OnPaint(gfx::Canvas* canvas) { |
| 204 double opaqueness = | 204 double opaqueness = |
| 205 fade_animation_ ? fade_animation_->GetCurrentValue() : 1.0; | 205 fade_animation_ ? fade_animation_->GetCurrentValue() : 1.0; |
| 206 if (media_state_ == TAB_MEDIA_STATE_NONE) | 206 if (alert_state_ == TabAlertState::NONE) |
| 207 opaqueness = 1.0 - opaqueness; // Fading out, not in. | 207 opaqueness = 1.0 - opaqueness; // Fading out, not in. |
| 208 if (opaqueness < 1.0) | 208 if (opaqueness < 1.0) |
| 209 canvas->SaveLayerAlpha(opaqueness * SK_AlphaOPAQUE); | 209 canvas->SaveLayerAlpha(opaqueness * SK_AlphaOPAQUE); |
| 210 ImageButton::OnPaint(canvas); | 210 ImageButton::OnPaint(canvas); |
| 211 if (opaqueness < 1.0) | 211 if (opaqueness < 1.0) |
| 212 canvas->Restore(); | 212 canvas->Restore(); |
| 213 } | 213 } |
| 214 | 214 |
| 215 bool MediaIndicatorButton::DoesIntersectRect(const views::View* target, | 215 bool AlertIndicatorButton::DoesIntersectRect(const views::View* target, |
| 216 const gfx::Rect& rect) const { | 216 const gfx::Rect& rect) const { |
| 217 // If this button is not enabled, Tab (the parent View) handles all mouse | 217 // If this button is not enabled, Tab (the parent View) handles all mouse |
| 218 // events. | 218 // events. |
| 219 return enabled() && | 219 return enabled() && |
| 220 views::ViewTargeterDelegate::DoesIntersectRect(target, rect); | 220 views::ViewTargeterDelegate::DoesIntersectRect(target, rect); |
| 221 } | 221 } |
| 222 | 222 |
| 223 void MediaIndicatorButton::NotifyClick(const ui::Event& event) { | 223 void AlertIndicatorButton::NotifyClick(const ui::Event& event) { |
| 224 if (media_state_ == TAB_MEDIA_STATE_AUDIO_PLAYING) | 224 if (alert_state_ == TabAlertState::AUDIO_PLAYING) |
| 225 content::RecordAction(UserMetricsAction("MediaIndicatorButton_Mute")); | 225 content::RecordAction(UserMetricsAction("AlertIndicatorButton_Mute")); |
| 226 else if (media_state_ == TAB_MEDIA_STATE_AUDIO_MUTING) | 226 else if (alert_state_ == TabAlertState::AUDIO_MUTING) |
| 227 content::RecordAction(UserMetricsAction("MediaIndicatorButton_Unmute")); | 227 content::RecordAction(UserMetricsAction("AlertIndicatorButton_Unmute")); |
| 228 else | 228 else |
| 229 NOTREACHED(); | 229 NOTREACHED(); |
| 230 | 230 |
| 231 GetTab()->controller()->ToggleTabAudioMute(GetTab()); | 231 GetTab()->controller()->ToggleTabAudioMute(GetTab()); |
| 232 } | 232 } |
| 233 | 233 |
| 234 bool MediaIndicatorButton::IsTriggerableEvent(const ui::Event& event) { | 234 bool AlertIndicatorButton::IsTriggerableEvent(const ui::Event& event) { |
| 235 // For mouse events, only trigger on the left mouse button and when no | 235 // For mouse events, only trigger on the left mouse button and when no |
| 236 // modifier keys are being held down. | 236 // modifier keys are being held down. |
| 237 if (event.IsMouseEvent() && | 237 if (event.IsMouseEvent() && |
| 238 (!static_cast<const ui::MouseEvent*>(&event)->IsOnlyLeftMouseButton() || | 238 (!static_cast<const ui::MouseEvent*>(&event)->IsOnlyLeftMouseButton() || |
| 239 IsShiftOrControlDown(event))) | 239 IsShiftOrControlDown(event))) |
| 240 return false; | 240 return false; |
| 241 | 241 |
| 242 // For gesture events on an inactive tab, require an even wider tab before | 242 // For gesture events on an inactive tab, require an even wider tab before |
| 243 // click-to-mute can be triggered. See comments in | 243 // click-to-mute can be triggered. See comments in |
| 244 // UpdateEnabledForMuteToggle(). | 244 // UpdateEnabledForMuteToggle(). |
| 245 if (event.IsGestureEvent() && !GetTab()->IsActive()) { | 245 if (event.IsGestureEvent() && !GetTab()->IsActive()) { |
| 246 const int required_width = width() * kMinGestureSelectableAreaPercent / 100; | 246 const int required_width = width() * kMinGestureSelectableAreaPercent / 100; |
| 247 if (GetTab()->GetWidthOfLargestSelectableRegion() < required_width) | 247 if (GetTab()->GetWidthOfLargestSelectableRegion() < required_width) |
| 248 return false; | 248 return false; |
| 249 } | 249 } |
| 250 | 250 |
| 251 return views::ImageButton::IsTriggerableEvent(event); | 251 return views::ImageButton::IsTriggerableEvent(event); |
| 252 } | 252 } |
| 253 | 253 |
| 254 Tab* MediaIndicatorButton::GetTab() const { | 254 Tab* AlertIndicatorButton::GetTab() const { |
| 255 DCHECK_EQ(static_cast<views::View*>(parent_tab_), parent()); | 255 DCHECK_EQ(static_cast<views::View*>(parent_tab_), parent()); |
| 256 return parent_tab_; | 256 return parent_tab_; |
| 257 } | 257 } |
| 258 | 258 |
| 259 void MediaIndicatorButton::ResetImages(TabMediaState state) { | 259 void AlertIndicatorButton::ResetImages(TabAlertState state) { |
| 260 SkColor color = parent_tab_->button_color(); | 260 SkColor color = parent_tab_->button_color(); |
| 261 gfx::ImageSkia indicator_image = | 261 gfx::ImageSkia indicator_image = |
| 262 chrome::GetTabMediaIndicatorImage(state, color).AsImageSkia(); | 262 chrome::GetTabAlertIndicatorImage(state, color).AsImageSkia(); |
| 263 SetImage(views::CustomButton::STATE_NORMAL, &indicator_image); | 263 SetImage(views::CustomButton::STATE_NORMAL, &indicator_image); |
| 264 SetImage(views::CustomButton::STATE_DISABLED, &indicator_image); | 264 SetImage(views::CustomButton::STATE_DISABLED, &indicator_image); |
| 265 gfx::ImageSkia affordance_image = | 265 gfx::ImageSkia affordance_image = |
| 266 chrome::GetTabMediaIndicatorAffordanceImage(state, color).AsImageSkia(); | 266 chrome::GetTabAlertIndicatorAffordanceImage(state, color).AsImageSkia(); |
| 267 SetImage(views::CustomButton::STATE_HOVERED, &affordance_image); | 267 SetImage(views::CustomButton::STATE_HOVERED, &affordance_image); |
| 268 SetImage(views::CustomButton::STATE_PRESSED, &affordance_image); | 268 SetImage(views::CustomButton::STATE_PRESSED, &affordance_image); |
| 269 } | 269 } |
| OLD | NEW |