Chromium Code Reviews| Index: chrome/browser/ui/toolbar/media_router_action_controller.h |
| diff --git a/chrome/browser/ui/toolbar/media_router_action_controller.h b/chrome/browser/ui/toolbar/media_router_action_controller.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8e3ecf64a062f993d8684d48e0b4206a30219f11 |
| --- /dev/null |
| +++ b/chrome/browser/ui/toolbar/media_router_action_controller.h |
| @@ -0,0 +1,85 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_UI_TOOLBAR_MEDIA_ROUTER_ACTION_CONTROLLER_H_ |
|
mark a. foltz
2016/09/02 22:19:09
I wonder if we should put this in its own folder,
|
| +#define CHROME_BROWSER_UI_TOOLBAR_MEDIA_ROUTER_ACTION_CONTROLLER_H_ |
| + |
| +#include <memory> |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/observer_list.h" |
| +#include "chrome/browser/extensions/component_migration_helper.h" |
| +#include "chrome/browser/media/router/issues_observer.h" |
| +#include "chrome/browser/media/router/media_router_factory.h" |
| +#include "chrome/browser/media/router/media_routes_observer.h" |
| +#include "chrome/browser/profiles/profile.h" |
| + |
| +class MediaRouterActionControllerUnitTest; |
| + |
| +// Controller for MediaRouterAction that determines when to show and hide the |
| +// action icon on the toolbar. |
| +// There should be one instance of this class per profile. |
|
imcheng
2016/08/31 05:39:48
If it were really the case, would it be better to
mark a. foltz
2016/09/02 22:19:09
Takumi and I discussed this. This code didn't see
|
| +class MediaRouterActionController |
| + : public media_router::IssuesObserver, |
| + public media_router::MediaRoutesObserver { |
| + public: |
| + class Observer { |
|
mark a. foltz
2016/09/02 22:19:09
I don't see any observers implemented in this chan
takumif
2016/09/07 21:48:33
It's for MRAction to observe MRActionController. A
|
| + public: |
| + virtual void OnIssueUpdated(const media_router::Issue* issue); |
|
imcheng
2016/08/31 05:39:49
Should these be pure virtual methods, i.e. Observe
mark a. foltz
2016/09/02 22:19:10
Pass by const reference
takumif
2016/09/07 21:48:33
MediaRouterActions will be observing |this|, rathe
takumif
2016/09/07 21:48:33
I'd like to be able to pass a nullptr to indicate
|
| + virtual void OnLocalRouteUpdated(bool has_local_route); |
|
mark a. foltz
2016/09/02 22:19:10
Bikeshed: slightly prefer an API
OnNumLocalRoutes
takumif
2016/09/07 21:48:33
Do we expect to ever have more than one local rout
|
| + }; |
| + |
| + MediaRouterActionController( |
| + Profile* profile, media_router::MediaRouter* router); |
|
mark a. foltz
2016/09/02 22:19:09
I'm not a huge fan of the circular dependency betw
imcheng
2016/09/08 20:49:31
I would suggest not having MediaRouter depend on M
|
| + ~MediaRouterActionController() override; |
| + |
| + // media_router::IssuesObserver: |
| + void OnIssueUpdated(const media_router::Issue* issue) override; |
| + |
| + // media_router::MediaRoutesObserver: |
| + void OnRoutesUpdated(const std::vector<media_router::MediaRoute>& routes, |
| + const std::vector<media_router::MediaRoute::Id>& |
| + joinable_route_ids) override; |
| + |
| + // Toggles the preferences to always show the Media Router action icon on the |
| + // toolbar. |
| + void ToggleActionVisibilityPreference(); |
|
mark a. foltz
2016/09/02 22:19:09
This API is error prone:
- You have to check the s
takumif
2016/09/07 21:48:33
I've changed it to SetAlwaysShowActionPref(bool al
|
| + |
| + bool HasLocalRoute() const; |
| + |
| + // Returns the current issue, or a nullptr if there is none. |
| + media_router::Issue* GetIssue() const; |
|
mark a. foltz
2016/09/02 22:19:09
If a caller wants to find the current issue should
takumif
2016/09/07 21:48:33
When a MRAction is instantiated, it needs to know
|
| + |
| + void AddObserver(Observer* observer); |
| + void RemoveObserver(Observer* observer); |
| + |
| + private: |
| + friend class MediaRouterActionControllerUnitTest; |
|
mark a. foltz
2016/09/02 22:19:09
The pattern I've seen is to use FRIEND_TEST_ALL_PR
takumif
2016/09/07 21:48:33
I wanted to give the base class access to private
|
| + |
| + // Adds or removes the Media Router action icon to/from the |delegate_|, |
| + // depending on whether we have issues or local routes. |
| + void UpdateActionVisibility(); |
|
mark a. foltz
2016/09/02 22:19:09
Bikeshed:
1. This may be a no-op if the action is
takumif
2016/09/07 21:48:33
Done.
|
| + |
| + // Whether the preference to always show the Media Router action icon is |
| + // turned on for the current profile. |
| + bool ShouldAlwaysShowIcon(); |
|
mark a. foltz
2016/09/02 22:19:09
Nit:
Please use 'Action' consistently to refer to
takumif
2016/09/07 21:48:33
Done.
|
| + |
| + // The profile |this| is associated with. There should be one instance of this |
| + // class per profile. |
| + Profile* profile_; |
|
imcheng
2016/08/31 05:39:49
Profile* const profile_;
takumif
2016/09/07 21:48:33
Done.
|
| + |
| + // The delegate that is responsible for showing and hiding the icon on the |
| + // toolbar. |
|
mark a. foltz
2016/09/02 22:19:09
Please document ownership & why delegate_ going to
takumif
2016/09/07 21:48:33
Done.
|
| + extensions::ComponentMigrationHelper::ComponentActionDelegate* delegate_; |
|
imcheng
2016/08/31 05:39:49
...ComponentActionDelegate* const delegate_;
mark a. foltz
2016/09/02 22:19:09
component_action_delegate_
takumif
2016/09/07 21:48:33
Done.
takumif
2016/09/07 21:48:33
Done.
|
| + |
| + std::unique_ptr<media_router::Issue> issue_; |
| + bool has_local_display_route_; |
| + |
| + base::ObserverList<Observer> observers_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MediaRouterActionController); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_UI_TOOLBAR_MEDIA_ROUTER_ACTION_CONTROLLER_H_ |