Index: chrome/browser/ui/toolbar/media_router_action.cc |
diff --git a/chrome/browser/ui/toolbar/media_router_action.cc b/chrome/browser/ui/toolbar/media_router_action.cc |
index 4d2ca8d54daa45488831eb6e01a582dddc6fa63f..7a9e6ff3e59ccd6cdae6281c943d29167f78098b 100644 |
--- a/chrome/browser/ui/toolbar/media_router_action.cc |
+++ b/chrome/browser/ui/toolbar/media_router_action.cc |
@@ -25,9 +25,31 @@ |
using media_router::MediaRouterDialogControllerImpl; |
+MediaRouterAction::ActionMediaRoutesObserver::ActionMediaRoutesObserver( |
+ media_router::MediaRouter* router, |
+ MediaRouterAction* action) |
+ : MediaRoutesObserver(router), |
+ action_(action) { |
+ DCHECK(action); |
+} |
+ |
+MediaRouterAction::ActionMediaRoutesObserver::~ActionMediaRoutesObserver() { |
+} |
+ |
+void MediaRouterAction::ActionMediaRoutesObserver::OnRoutesUpdated( |
+ const std::vector<media_router::MediaRoute>& routes) { |
+ bool has_local_route = |
+ std::find_if(routes.begin(), routes.end(), |
+ [](const media_router::MediaRoute& route) { |
+ return route.is_local(); }) != |
+ routes.end(); |
+ |
+ action_->SetHasLocalRoute(has_local_route); |
imcheng
2015/10/01 18:46:50
there should be a comment that |this| will be dele
apacible
2015/10/01 23:21:47
Done (after moving this to MediaRouterMojoImpl).
|
+} |
+ |
MediaRouterAction::MediaRouterAction(Browser* browser) |
: media_router::IssuesObserver(GetMediaRouter(browser)), |
- media_router::MediaRoutesObserver(GetMediaRouter(browser)), |
+ media_router::LocalMediaRoutesObserver(GetMediaRouter(browser)), |
media_router_active_icon_( |
ui::ResourceBundle::GetSharedInstance() |
.GetImageNamed(IDR_MEDIA_ROUTER_ACTIVE_ICON)), |
@@ -42,6 +64,8 @@ MediaRouterAction::MediaRouterAction(Browser* browser) |
has_local_route_(false), |
delegate_(nullptr), |
browser_(browser), |
+ routes_observer_(new ActionMediaRoutesObserver( |
imcheng
2015/10/01 18:46:50
So we are still sending a routes query on construc
apacible
2015/10/01 23:21:47
Talked offline. Done.
|
+ GetMediaRouter(browser), this)), |
platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)), |
contextual_menu_(browser), |
tab_strip_model_observer_(this), |
@@ -51,6 +75,7 @@ MediaRouterAction::MediaRouterAction(Browser* browser) |
} |
MediaRouterAction::~MediaRouterAction() { |
+ routes_observer_.reset(); |
imcheng
2015/10/01 18:46:50
not needed?
apacible
2015/10/01 23:21:47
Done.
|
} |
std::string MediaRouterAction::GetId() const { |
@@ -138,14 +163,10 @@ void MediaRouterAction::OnIssueUpdated(const media_router::Issue* issue) { |
MaybeUpdateIcon(); |
} |
-void MediaRouterAction::OnRoutesUpdated( |
- const std::vector<media_router::MediaRoute>& routes) { |
- has_local_route_ = |
- std::find_if(routes.begin(), routes.end(), |
- [](const media_router::MediaRoute& route) { |
- return route.is_local(); }) != |
- routes.end(); |
- MaybeUpdateIcon(); |
+void MediaRouterAction::OnLocalRouteCreated() { |
+ if (!routes_observer_) |
+ routes_observer_.reset(new ActionMediaRoutesObserver( |
+ GetMediaRouter(browser_), this)); |
} |
void MediaRouterAction::ActiveTabChanged(content::WebContents* old_contents, |
@@ -167,6 +188,15 @@ void MediaRouterAction::OnPopupShown() { |
delegate_->OnPopupShown(true); |
} |
+void MediaRouterAction::SetHasLocalRoute(bool has_local_route) { |
+ has_local_route_ = has_local_route; |
+ |
+ if (!has_local_route_) |
+ routes_observer_.reset(); |
+ |
+ MaybeUpdateIcon(); |
+} |
+ |
void MediaRouterAction::UpdatePopupState() { |
MediaRouterDialogControllerImpl* controller = |
GetMediaRouterDialogController(); |