OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/toolbar/media_router_action.h" | 5 #include "chrome/browser/ui/toolbar/media_router_action.h" |
6 | 6 |
7 #include "base/metrics/user_metrics.h" | 7 #include "base/metrics/user_metrics.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "chrome/browser/media/router/issue.h" | 9 #include "chrome/browser/media/router/issue.h" |
10 #include "chrome/browser/media/router/media_route.h" | 10 #include "chrome/browser/media/router/media_route.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 namespace { | 30 namespace { |
31 | 31 |
32 media_router::MediaRouter* GetMediaRouter(Browser* browser) { | 32 media_router::MediaRouter* GetMediaRouter(Browser* browser) { |
33 return media_router::MediaRouterFactory::GetApiForBrowserContext( | 33 return media_router::MediaRouterFactory::GetApiForBrowserContext( |
34 browser->profile()); | 34 browser->profile()); |
35 } | 35 } |
36 | 36 |
37 } // namespace | 37 } // namespace |
38 | 38 |
39 MediaRouterAction::MediaRouterAction(Browser* browser) | 39 MediaRouterAction::MediaRouterAction(Browser* browser, |
| 40 ToolbarActionsBar* toolbar_actions_bar) |
40 : media_router::IssuesObserver(GetMediaRouter(browser)), | 41 : media_router::IssuesObserver(GetMediaRouter(browser)), |
41 media_router::LocalMediaRoutesObserver(GetMediaRouter(browser)), | 42 media_router::LocalMediaRoutesObserver(GetMediaRouter(browser)), |
42 media_router_active_icon_( | 43 media_router_active_icon_( |
43 ui::ResourceBundle::GetSharedInstance() | 44 ui::ResourceBundle::GetSharedInstance() |
44 .GetImageNamed(IDR_MEDIA_ROUTER_ACTIVE_ICON)), | 45 .GetImageNamed(IDR_MEDIA_ROUTER_ACTIVE_ICON)), |
45 media_router_error_icon_(ui::ResourceBundle::GetSharedInstance() | 46 media_router_error_icon_(ui::ResourceBundle::GetSharedInstance() |
46 .GetImageNamed(IDR_MEDIA_ROUTER_ERROR_ICON)), | 47 .GetImageNamed(IDR_MEDIA_ROUTER_ERROR_ICON)), |
47 media_router_idle_icon_(ui::ResourceBundle::GetSharedInstance() | 48 media_router_idle_icon_(ui::ResourceBundle::GetSharedInstance() |
48 .GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)), | 49 .GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)), |
49 media_router_warning_icon_( | 50 media_router_warning_icon_( |
50 ui::ResourceBundle::GetSharedInstance() | 51 ui::ResourceBundle::GetSharedInstance() |
51 .GetImageNamed(IDR_MEDIA_ROUTER_WARNING_ICON)), | 52 .GetImageNamed(IDR_MEDIA_ROUTER_WARNING_ICON)), |
52 current_icon_(&media_router_idle_icon_), | 53 current_icon_(&media_router_idle_icon_), |
53 has_local_display_route_(false), | 54 has_local_display_route_(false), |
54 delegate_(nullptr), | 55 delegate_(nullptr), |
55 browser_(browser), | 56 browser_(browser), |
| 57 toolbar_actions_bar_(toolbar_actions_bar), |
56 platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)), | 58 platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)), |
57 contextual_menu_(browser), | 59 contextual_menu_(browser), |
58 tab_strip_model_observer_(this), | 60 tab_strip_model_observer_(this), |
59 weak_ptr_factory_(this) { | 61 weak_ptr_factory_(this) { |
60 DCHECK(browser_); | 62 DCHECK(browser_); |
| 63 DCHECK(toolbar_actions_bar_); |
61 tab_strip_model_observer_.Add(browser_->tab_strip_model()); | 64 tab_strip_model_observer_.Add(browser_->tab_strip_model()); |
62 | 65 |
63 RegisterObserver(); | 66 RegisterObserver(); |
64 OnHasLocalDisplayRouteUpdated( | 67 OnHasLocalDisplayRouteUpdated( |
65 GetMediaRouter(browser)->HasLocalDisplayRoute()); | 68 GetMediaRouter(browser)->HasLocalDisplayRoute()); |
66 } | 69 } |
67 | 70 |
68 MediaRouterAction::~MediaRouterAction() { | 71 MediaRouterAction::~MediaRouterAction() { |
69 UnregisterObserver(); | 72 UnregisterObserver(); |
70 } | 73 } |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 delegate_->OnPopupShown(true); | 188 delegate_->OnPopupShown(true); |
186 } | 189 } |
187 | 190 |
188 void MediaRouterAction::UpdatePopupState() { | 191 void MediaRouterAction::UpdatePopupState() { |
189 MediaRouterDialogControllerImpl* controller = | 192 MediaRouterDialogControllerImpl* controller = |
190 GetMediaRouterDialogController(); | 193 GetMediaRouterDialogController(); |
191 | 194 |
192 if (!controller) | 195 if (!controller) |
193 return; | 196 return; |
194 | 197 |
195 // Immediately keep track of MediaRouterAction in the controller. If it was | 198 // When each browser window is created, its toolbar creates a |
196 // already set, this should be a no-op. | 199 // MediaRouterAction that is only destroyed when the browser window is torn |
197 controller->SetMediaRouterAction(weak_ptr_factory_.GetWeakPtr()); | 200 // down. |controller| will keep track of that instance. If |this| was created |
| 201 // in overflow mode, it will be destroyed when the overflow menu is closed. |
| 202 // If SetMediaRouterAction() was previously called, this is a no-op. |
| 203 if (!toolbar_actions_bar_->in_overflow_mode()) |
| 204 controller->SetMediaRouterAction(weak_ptr_factory_.GetWeakPtr()); |
198 | 205 |
199 // Update the button in case the pressed state is out of sync with dialog | 206 // Update the button in case the pressed state is out of sync with dialog |
200 // visibility. | 207 // visibility. |
201 if (controller->IsShowingMediaRouterDialog()) | 208 if (controller->IsShowingMediaRouterDialog()) |
202 OnPopupShown(); | 209 OnPopupShown(); |
203 else | 210 else |
204 OnPopupHidden(); | 211 OnPopupHidden(); |
205 } | 212 } |
206 | 213 |
207 MediaRouterDialogControllerImpl* | 214 MediaRouterDialogControllerImpl* |
(...skipping 28 matching lines...) Expand all Loading... |
236 if (issue_) { | 243 if (issue_) { |
237 if (issue_->severity() == media_router::Issue::FATAL) | 244 if (issue_->severity() == media_router::Issue::FATAL) |
238 return &media_router_error_icon_; | 245 return &media_router_error_icon_; |
239 if (issue_->severity() == media_router::Issue::WARNING) | 246 if (issue_->severity() == media_router::Issue::WARNING) |
240 return &media_router_warning_icon_; | 247 return &media_router_warning_icon_; |
241 } | 248 } |
242 | 249 |
243 return has_local_display_route_ ? &media_router_active_icon_ | 250 return has_local_display_route_ ? &media_router_active_icon_ |
244 : &media_router_idle_icon_; | 251 : &media_router_idle_icon_; |
245 } | 252 } |
OLD | NEW |