| Index: chrome/browser/media/router/media_router_mojo_impl.cc
|
| diff --git a/chrome/browser/media/router/media_router_mojo_impl.cc b/chrome/browser/media/router/media_router_mojo_impl.cc
|
| index cfdd2b8d355f2b346a4fab1c63550b3c26781c9b..16de99a9ddd772a73b05ba3a15a6cb73f861b5e2 100644
|
| --- a/chrome/browser/media/router/media_router_mojo_impl.cc
|
| +++ b/chrome/browser/media/router/media_router_mojo_impl.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/observer_list.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "chrome/browser/media/router/issues_observer.h"
|
| +#include "chrome/browser/media/router/local_media_routes_observer.h"
|
| #include "chrome/browser/media/router/media_router_factory.h"
|
| #include "chrome/browser/media/router/media_router_type_converters.h"
|
| #include "chrome/browser/media/router/media_routes_observer.h"
|
| @@ -26,29 +27,6 @@
|
| namespace media_router {
|
| namespace {
|
|
|
| -// Converts the callback result of calling Mojo CreateRoute()/JoinRoute()
|
| -// into a local callback.
|
| -void RouteResponseReceived(
|
| - const std::string& presentation_id,
|
| - const std::vector<MediaRouteResponseCallback>& callbacks,
|
| - interfaces::MediaRoutePtr media_route,
|
| - const mojo::String& error_text) {
|
| - scoped_ptr<MediaRoute> route;
|
| - std::string actual_presentation_id;
|
| - std::string error;
|
| - if (media_route.is_null()) {
|
| - // An error occurred.
|
| - DCHECK(!error_text.is_null());
|
| - error = !error_text.get().empty() ? error_text.get() : "Unknown error.";
|
| - } else {
|
| - route = media_route.To<scoped_ptr<MediaRoute>>();
|
| - actual_presentation_id = presentation_id;
|
| - }
|
| -
|
| - for (const MediaRouteResponseCallback& callback : callbacks)
|
| - callback.Run(route.get(), actual_presentation_id, error);
|
| -}
|
| -
|
| // TODO(imcheng): We should handle failure in this case. One way is to invoke
|
| // all pending requests with failure. (crbug.com/490787)
|
| void EventPageWakeComplete(bool success) {
|
| @@ -191,6 +169,29 @@ void MediaRouterMojoImpl::OnRoutesUpdated(
|
| OnRoutesUpdated(routes_converted));
|
| }
|
|
|
| +void MediaRouterMojoImpl::RouteResponseReceived(
|
| + const std::string& presentation_id,
|
| + const std::vector<MediaRouteResponseCallback>& callbacks,
|
| + interfaces::MediaRoutePtr media_route,
|
| + const mojo::String& error_text) {
|
| + scoped_ptr<MediaRoute> route;
|
| + std::string actual_presentation_id;
|
| + std::string error;
|
| + if (media_route.is_null()) {
|
| + // An error occurred.
|
| + DCHECK(!error_text.is_null());
|
| + error = !error_text.get().empty() ? error_text.get() : "Unknown error.";
|
| + } else {
|
| + route = media_route.To<scoped_ptr<MediaRoute>>();
|
| + actual_presentation_id = presentation_id;
|
| + FOR_EACH_OBSERVER(LocalMediaRoutesObserver, local_routes_observers_,
|
| + OnLocalRouteCreated());
|
| + }
|
| +
|
| + for (const MediaRouteResponseCallback& callback : callbacks)
|
| + callback.Run(route.get(), actual_presentation_id, error);
|
| +}
|
| +
|
| void MediaRouterMojoImpl::CreateRoute(
|
| const MediaSource::Id& source_id,
|
| const MediaSink::Id& sink_id,
|
| @@ -392,6 +393,25 @@ void MediaRouterMojoImpl::UnregisterPresentationSessionMessagesObserver(
|
| }
|
| }
|
|
|
| +void MediaRouterMojoImpl::RegisterLocalMediaRoutesObserver(
|
| + LocalMediaRoutesObserver* observer) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK(observer);
|
| +
|
| + DCHECK(!local_routes_observers_.HasObserver(observer));
|
| + local_routes_observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void MediaRouterMojoImpl::UnregisterLocalMediaRoutesObserver(
|
| + LocalMediaRoutesObserver* observer) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK(observer);
|
| +
|
| + if (!local_routes_observers_.HasObserver(observer))
|
| + return;
|
| + local_routes_observers_.RemoveObserver(observer);
|
| +}
|
| +
|
| void MediaRouterMojoImpl::DoCreateRoute(
|
| const MediaSource::Id& source_id,
|
| const MediaSink::Id& sink_id,
|
| @@ -404,7 +424,8 @@ void MediaRouterMojoImpl::DoCreateRoute(
|
| << ", presentation ID: " << presentation_id;
|
| media_route_provider_->CreateRoute(
|
| source_id, sink_id, presentation_id, origin, tab_id,
|
| - base::Bind(&RouteResponseReceived, presentation_id, callbacks));
|
| + base::Bind(&MediaRouterMojoImpl::RouteResponseReceived,
|
| + base::Unretained(this), presentation_id, callbacks));
|
| }
|
|
|
| void MediaRouterMojoImpl::DoJoinRoute(
|
| @@ -417,7 +438,8 @@ void MediaRouterMojoImpl::DoJoinRoute(
|
| << ", presentation ID: " << presentation_id;
|
| media_route_provider_->JoinRoute(
|
| source_id, presentation_id, origin, tab_id,
|
| - base::Bind(&RouteResponseReceived, presentation_id, callbacks));
|
| + base::Bind(&MediaRouterMojoImpl::RouteResponseReceived,
|
| + base::Unretained(this), presentation_id, callbacks));
|
| }
|
|
|
| void MediaRouterMojoImpl::DoCloseRoute(const MediaRoute::Id& route_id) {
|
|
|