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

Unified Diff: chrome/browser/ui/ash/cast_config_delegate_media_router.cc

Issue 2525563003: mash: Change CastConfigDelegate to a mojoified CastConfigClient. (Closed)
Patch Set: move dep to chromeos section Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/ash/cast_config_delegate_media_router.cc
diff --git a/chrome/browser/ui/ash/cast_config_delegate_media_router.cc b/chrome/browser/ui/ash/cast_config_delegate_media_router.cc
deleted file mode 100644
index 465c01844d4d3137024d156a216cceded7302ff8..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/ash/cast_config_delegate_media_router.cc
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright 2015 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.
-
-#include "chrome/browser/ui/ash/cast_config_delegate_media_router.h"
-
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/media/router/media_router.h"
-#include "chrome/browser/media/router/media_router_factory.h"
-#include "chrome/browser/media/router/media_router_feature.h"
-#include "chrome/browser/media/router/media_routes_observer.h"
-#include "chrome/browser/media/router/media_sinks_observer.h"
-#include "chrome/browser/media/router/media_source_helper.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-
-namespace {
-
-media_router::MediaRouter* media_router_for_test_ = nullptr;
-
-// Returns the MediaRouter instance for the current primary profile.
-media_router::MediaRouter* GetMediaRouter() {
- if (media_router_for_test_)
- return media_router_for_test_;
-
- auto* router = media_router::MediaRouterFactory::GetApiForBrowserContext(
- ProfileManager::GetPrimaryUserProfile());
- DCHECK(router);
- return router;
-}
-
-// The media router will sometimes append " (Tab)" to the tab title. This
-// function will remove that data from the inout param |string|.
-std::string StripEndingTab(const std::string& str) {
- static const char ending[] = " (Tab)";
- if (base::EndsWith(str, ending, base::CompareCase::SENSITIVE))
- return str.substr(0, str.size() - strlen(ending));
- return str;
-}
-
-} // namespace
-
-// This class caches the values that the observers give us so we can query them
-// at any point in time. It also emits a device refresh event when new data is
-// available.
-class CastDeviceCache : public media_router::MediaRoutesObserver,
- public media_router::MediaSinksObserver {
- public:
- using MediaSinks = std::vector<media_router::MediaSink>;
- using MediaRoutes = std::vector<media_router::MediaRoute>;
- using MediaRouteIds = std::vector<media_router::MediaRoute::Id>;
-
- explicit CastDeviceCache(ash::CastConfigDelegate* cast_config_delegate);
- ~CastDeviceCache() override;
-
- // This may call cast_config_delegate->RequestDeviceRefresh() before
- // returning.
- void Init();
-
- const MediaSinks& sinks() const { return sinks_; }
- const MediaRoutes& routes() const { return routes_; }
-
- private:
- // media_router::MediaSinksObserver:
- void OnSinksReceived(const MediaSinks& sinks) override;
-
- // media_router::MediaRoutesObserver:
- void OnRoutesUpdated(const MediaRoutes& routes,
- const MediaRouteIds& unused_joinable_route_ids) override;
-
- MediaSinks sinks_;
- MediaRoutes routes_;
-
- // Not owned.
- ash::CastConfigDelegate* cast_config_delegate_;
-
- DISALLOW_COPY_AND_ASSIGN(CastDeviceCache);
-};
-
-CastDeviceCache::CastDeviceCache(ash::CastConfigDelegate* cast_config_delegate)
- : MediaRoutesObserver(GetMediaRouter()),
- MediaSinksObserver(GetMediaRouter(),
- media_router::MediaSourceForDesktop(),
- GURL(chrome::kChromeUIMediaRouterURL)),
- cast_config_delegate_(cast_config_delegate) {}
-
-CastDeviceCache::~CastDeviceCache() {}
-
-void CastDeviceCache::Init() {
- CHECK(MediaSinksObserver::Init());
-}
-
-void CastDeviceCache::OnSinksReceived(const MediaSinks& sinks) {
- sinks_.clear();
- for (const media_router::MediaSink& sink : sinks) {
- // The media router adds a MediaSink instance that doesn't have a name. Make
- // sure to filter that sink out from the UI so it is not rendered, as it
- // will be a line that only has a icon with no apparent meaning.
- if (sink.name().empty())
- continue;
-
- // Hide all sinks which have a domain (ie, castouts) to meet privacy
- // requirements. This will be enabled once UI can display the domain. See
- // crbug.com/624016.
- if (!sink.domain().empty())
- continue;
-
- sinks_.push_back(sink);
- }
-
- cast_config_delegate_->RequestDeviceRefresh();
-}
-
-void CastDeviceCache::OnRoutesUpdated(
- const MediaRoutes& routes,
- const MediaRouteIds& unused_joinable_route_ids) {
- routes_ = routes;
- cast_config_delegate_->RequestDeviceRefresh();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// CastConfigDelegateMediaRouter:
-
-void CastConfigDelegateMediaRouter::SetMediaRouterForTest(
- media_router::MediaRouter* media_router) {
- media_router_for_test_ = media_router;
-}
-
-CastConfigDelegateMediaRouter::CastConfigDelegateMediaRouter() {
- // TODO(jdufault): This should use a callback interface once there is an
- // equivalent. See crbug.com/666005.
- registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED,
- content::NotificationService::AllSources());
-}
-
-CastConfigDelegateMediaRouter::~CastConfigDelegateMediaRouter() {}
-
-CastDeviceCache* CastConfigDelegateMediaRouter::devices() {
- // The CastDeviceCache instance is lazily allocated because the MediaRouter
- // component is not ready when the constructor is invoked.
- if (!devices_ && GetMediaRouter()) {
- devices_ = base::MakeUnique<CastDeviceCache>(this);
- devices_->Init();
- }
-
- return devices_.get();
-}
-
-void CastConfigDelegateMediaRouter::RequestDeviceRefresh() {
- // The media router component isn't ready yet.
- if (!devices())
- return;
-
- // Build the old-style SinkAndRoute set out of the MediaRouter
- // source/sink/route setup. We first map the existing sinks, and then we
- // update those sinks with activity information.
-
- SinksAndRoutes items;
-
- for (const media_router::MediaSink& sink : devices()->sinks()) {
- SinkAndRoute sr;
- sr.sink.id = sink.id();
- sr.sink.name = base::UTF8ToUTF16(sink.name());
- sr.sink.domain = base::UTF8ToUTF16(sink.domain());
- items.push_back(sr);
- }
-
- for (const media_router::MediaRoute& route : devices()->routes()) {
- if (!route.for_display())
- continue;
-
- for (SinkAndRoute& item : items) {
- if (item.sink.id == route.media_sink_id()) {
- item.route.id = route.media_route_id();
- item.route.title =
- base::UTF8ToUTF16(StripEndingTab(route.description()));
- item.route.is_local_source = route.is_local();
-
- // Default to a tab/app capture. This will display the media router
- // description. This means we will properly support DIAL casts.
- item.route.content_source = Route::ContentSource::TAB;
- if (media_router::IsDesktopMirroringMediaSource(route.media_source()))
- item.route.content_source = Route::ContentSource::DESKTOP;
-
- break;
- }
- }
- }
-
- for (ash::CastConfigDelegate::Observer& observer : observer_list_)
- observer.OnDevicesUpdated(items);
-}
-
-void CastConfigDelegateMediaRouter::CastToSink(const Sink& sink) {
- // TODO(imcheng): Pass in tab casting timeout.
- GetMediaRouter()->CreateRoute(
- media_router::MediaSourceForDesktop().id(), sink.id,
- GURL("http://cros-cast-origin/"), nullptr,
- std::vector<media_router::MediaRouteResponseCallback>(),
- base::TimeDelta(), false);
-}
-
-void CastConfigDelegateMediaRouter::StopCasting(const Route& route) {
- GetMediaRouter()->TerminateRoute(route.id);
-}
-
-void CastConfigDelegateMediaRouter::AddObserver(
- ash::CastConfigDelegate::Observer* observer) {
- observer_list_.AddObserver(observer);
-}
-
-void CastConfigDelegateMediaRouter::RemoveObserver(
- ash::CastConfigDelegate::Observer* observer) {
- observer_list_.RemoveObserver(observer);
-}
-
-void CastConfigDelegateMediaRouter::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- switch (type) {
- case chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED:
- // The active profile has changed, which means that the media router has
- // as well. Reset the device cache to ensure we are using up-to-date
- // object instances.
- devices_.reset();
- RequestDeviceRefresh();
- break;
- }
-}
« no previous file with comments | « chrome/browser/ui/ash/cast_config_delegate_media_router.h ('k') | chrome/browser/ui/ash/system_tray_delegate_chromeos.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698