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

Side by Side Diff: chrome/browser/ui/toolbar/media_router_action.cc

Issue 1268553002: Reflect the current state in Media Router Action icon. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests (lsan). Created 5 years, 4 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 unified diff | Download patch
OLDNEW
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/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/media/router/issue.h"
9 #include "chrome/browser/media/router/media_route.h"
10 #include "chrome/browser/media/router/media_router.h"
8 #include "chrome/browser/media/router/media_router_dialog_controller.h" 11 #include "chrome/browser/media/router/media_router_dialog_controller.h"
12 #include "chrome/browser/media/router/media_router_factory.h"
13 #include "chrome/browser/media/router/media_router_mojo_impl.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/toolbar/media_router_action_platform_delegate.h" 16 #include "chrome/browser/ui/toolbar/media_router_action_platform_delegate.h"
10 #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h" 17 #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h"
11 #include "chrome/grit/generated_resources.h" 18 #include "chrome/grit/generated_resources.h"
12 #include "grit/theme_resources.h" 19 #include "grit/theme_resources.h"
13 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
14 #include "ui/base/resource/resource_bundle.h" 21 #include "ui/base/resource/resource_bundle.h"
15 #include "ui/gfx/image/image_skia.h" 22 #include "ui/gfx/image/image_skia.h"
16 23
17 using media_router::MediaRouterDialogController; 24 using media_router::MediaRouterDialogController;
18 25
19 MediaRouterAction::MediaRouterAction(Browser* browser) 26 MediaRouterAction::MediaRouterAction(Browser* browser)
20 : id_("media_router_action"), 27 : media_router::IssuesObserver(GetMediaRouter(browser)),
28 media_router::MediaRoutesObserver(GetMediaRouter(browser)),
29 id_("media_router_action"),
21 name_(l10n_util::GetStringUTF16(IDS_MEDIA_ROUTER_TITLE)), 30 name_(l10n_util::GetStringUTF16(IDS_MEDIA_ROUTER_TITLE)),
31 media_router_active_icon_(ui::ResourceBundle::GetSharedInstance().
32 GetImageNamed(IDR_MEDIA_ROUTER_ACTIVE_ICON)),
33 media_router_error_icon_(ui::ResourceBundle::GetSharedInstance().
34 GetImageNamed(IDR_MEDIA_ROUTER_ERROR_ICON)),
22 media_router_idle_icon_(ui::ResourceBundle::GetSharedInstance(). 35 media_router_idle_icon_(ui::ResourceBundle::GetSharedInstance().
23 GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)), 36 GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)),
37 media_router_warning_icon_(ui::ResourceBundle::GetSharedInstance().
38 GetImageNamed(IDR_MEDIA_ROUTER_WARNING_ICON)),
39 current_icon_(&media_router_idle_icon_),
40 has_local_route_(false),
24 delegate_(nullptr), 41 delegate_(nullptr),
25 platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)), 42 platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)),
26 contextual_menu_(browser) { 43 contextual_menu_(browser) {
27 } 44 }
28 45
29 MediaRouterAction::~MediaRouterAction() { 46 MediaRouterAction::~MediaRouterAction() {
30 } 47 }
31 48
32 const std::string& MediaRouterAction::GetId() const { 49 const std::string& MediaRouterAction::GetId() const {
33 return id_; 50 return id_;
34 } 51 }
35 52
36 void MediaRouterAction::SetDelegate(ToolbarActionViewDelegate* delegate) { 53 void MediaRouterAction::SetDelegate(ToolbarActionViewDelegate* delegate) {
37 delegate_ = delegate; 54 delegate_ = delegate;
38 } 55 }
39 56
40 gfx::Image MediaRouterAction::GetIcon(content::WebContents* web_contents, 57 gfx::Image MediaRouterAction::GetIcon(content::WebContents* web_contents,
41 const gfx::Size& size) { 58 const gfx::Size& size) {
42 // TODO(apacible): Return icon based on casting state. 59 return *current_icon_;
43 return media_router_idle_icon_;
44 } 60 }
45 61
46 base::string16 MediaRouterAction::GetActionName() const { 62 base::string16 MediaRouterAction::GetActionName() const {
47 return name_; 63 return name_;
48 } 64 }
49 65
50 base::string16 MediaRouterAction::GetAccessibleName( 66 base::string16 MediaRouterAction::GetAccessibleName(
51 content::WebContents* web_contents) const { 67 content::WebContents* web_contents) const {
52 return GetTooltip(web_contents); 68 return GetTooltip(web_contents);
53 } 69 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 bool MediaRouterAction::ExecuteAction(bool by_user) { 107 bool MediaRouterAction::ExecuteAction(bool by_user) {
92 GetMediaRouterDialogController()->ShowMediaRouterDialog(); 108 GetMediaRouterDialogController()->ShowMediaRouterDialog();
93 if (platform_delegate_) 109 if (platform_delegate_)
94 platform_delegate_->CloseOverflowMenuIfOpen(); 110 platform_delegate_->CloseOverflowMenuIfOpen();
95 return true; 111 return true;
96 } 112 }
97 113
98 void MediaRouterAction::UpdateState() { 114 void MediaRouterAction::UpdateState() {
99 } 115 }
100 116
117 bool MediaRouterAction::DisabledClickOpensMenu() const {
118 return false;
119 }
120
121 void MediaRouterAction::OnIssueUpdated(const media_router::Issue* issue) {
122 issue_.reset(issue ? new media_router::Issue(*issue) : nullptr);
123
124 MaybeUpdateIcon();
125 }
126
127 void MediaRouterAction::OnRoutesUpdated(
128 const std::vector<media_router::MediaRoute>& routes) {
129 has_local_route_ =
130 std::find_if(routes.begin(), routes.end(),
131 [](const media_router::MediaRoute& route) {
132 return route.is_local(); }) !=
133 routes.end();
134 MaybeUpdateIcon();
135 }
136
101 MediaRouterDialogController* 137 MediaRouterDialogController*
102 MediaRouterAction::GetMediaRouterDialogController() { 138 MediaRouterAction::GetMediaRouterDialogController() {
103 DCHECK(delegate_); 139 DCHECK(delegate_);
104 content::WebContents* web_contents = delegate_->GetCurrentWebContents(); 140 content::WebContents* web_contents = delegate_->GetCurrentWebContents();
105 DCHECK(web_contents); 141 DCHECK(web_contents);
106 return MediaRouterDialogController::GetOrCreateForWebContents(web_contents); 142 return MediaRouterDialogController::GetOrCreateForWebContents(web_contents);
107 } 143 }
108 144
109 bool MediaRouterAction::DisabledClickOpensMenu() const { 145 media_router::MediaRouter* MediaRouterAction::GetMediaRouter(Browser* browser) {
110 return false; 146 return media_router::MediaRouterFactory::GetApiForBrowserContext(
147 static_cast<content::BrowserContext*>(browser->profile()));
111 } 148 }
149
150 void MediaRouterAction::MaybeUpdateIcon() {
151 const gfx::Image* new_icon = GetCurrentIcon();
152
153 // Update the current state if it has changed.
154 if (new_icon != current_icon_) {
155 current_icon_ = new_icon;
156
157 // Tell the associated view to update its icon to reflect the change made
158 // above.
159 if (delegate_)
160 delegate_->UpdateState();
161 }
162 }
163
164 const gfx::Image* MediaRouterAction::GetCurrentIcon() const {
165 // Highest priority is to indicate whether there's an issue.
166 if (issue_) {
167 if (issue_->severity() == media_router::Issue::FATAL)
168 return &media_router_error_icon_;
169 if (issue_->severity() == media_router::Issue::WARNING)
170 return &media_router_warning_icon_;
171 }
172
173 return has_local_route_ ?
174 &media_router_active_icon_ : &media_router_idle_icon_;
175 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/toolbar/media_router_action.h ('k') | chrome/browser/ui/toolbar/media_router_action_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698