Chromium Code Reviews| 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(); |