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

Side by Side Diff: chrome/browser/media/router/dial_media_sink_cache_service.cc

Issue 2701633002: [Media Router] Add DialMediaSinkService and DeviceDescriptionService (Closed)
Patch Set: Add DialMediaSinkCacheService and unit test Created 3 years, 9 months 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/media/router/dial_media_sink_cache_service.h"
6
7 #include "base/time/time.h"
8 #include "chrome/browser/extensions/api/dial/device_description_fetcher.h"
9 #include "chrome/browser/extensions/api/dial/dial_api.h"
10 #include "chrome/browser/extensions/api/dial/dial_api_factory.h"
11 #include "chrome/browser/extensions/api/dial/dial_device_data.h"
12 #include "chrome/browser/media/router/media_sinks_observer.h"
13 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "content/public/browser/browser_thread.h"
16
17 using base::Time;
18 using base::TimeDelta;
19
20 namespace {
21 // The maximum time a response is expected after a M-SEARCH request.
22 const int kSinkAliveTimeoutSecs = 2;
23 }
24
25 namespace media_router {
26
27 DialMediaSinkCacheService::DialMediaSinkCacheService() {}
28 DialMediaSinkCacheService::~DialMediaSinkCacheService() {}
29
30 std::vector<MediaSinkInternal> DialMediaSinkCacheService::GetAliveSinks() {
31 DCHECK(thread_checker_.CalledOnValidThread());
32
33 std::vector<MediaSinkInternal> alive_sinks;
34 for (const auto& sink_it : cached_sinks_) {
35 if (IsAlive(sink_it.second))
36 alive_sinks.push_back(sink_it.second.sink);
37 }
38 return alive_sinks;
39 }
40
41 void DialMediaSinkCacheService::PruneInactiveSinks(
42 bool network_connected,
43 DeviceDescriptionService* description_service,
44 net::URLRequestContextGetter* request_context) {
45 DCHECK(thread_checker_.CalledOnValidThread());
46
47 if (!network_connected)
48 return;
49
50 for (const auto& sink_it : cached_sinks_) {
51 if (IsAlive(sink_it.second))
52 continue;
53
54 description_service->CheckAccess(
55 sink_it.second.description_url, request_context,
56 base::Bind(&DialMediaSinkCacheService::OnCheckAccessCompleted,
57 base::Unretained(this), sink_it.first));
58 }
59 }
60
61 void DialMediaSinkCacheService::OnCheckAccessCompleted(
62 const std::string& sink_id,
63 bool is_accessible) {
64 DCHECK(thread_checker_.CalledOnValidThread());
65
66 if (!is_accessible)
67 cached_sinks_.erase(sink_id);
68 }
69
70 bool DialMediaSinkCacheService::AddOrUpdateSink(
71 const DialDeviceDescription& device_description) {
72 DCHECK(thread_checker_.CalledOnValidThread());
73
74 MediaSink sink(device_description.unique_id, device_description.friendly_name,
75 MediaSink::IconType::CAST);
76 DialSinkExtraData extra_data;
77 extra_data.app_url = device_description.app_url;
78 extra_data.model_name = device_description.model_name;
79 DCHECK(
80 extra_data.ip_address.AssignFromIPLiteral(device_description.ip_address));
81
82 CachedDialMediaSink cached_sink;
83 cached_sink.sink = MediaSinkInternal(sink, extra_data);
84 cached_sink.last_update_time = base::Time::Now();
85 cached_sink.description_url = device_description.device_description_url;
86
87 const auto& sink_it = cached_sinks_.find(sink.id());
88 if (sink_it == cached_sinks_.end()) {
89 cached_sinks_.insert(std::make_pair(sink.id(), cached_sink));
90 } else {
91 if (cached_sink.sink == sink_it->second.sink)
92 return false;
93
94 sink_it->second = cached_sink;
95 }
96 return true;
97 }
98
99 bool DialMediaSinkCacheService::IsAlive(const CachedDialMediaSink& sink) {
100 DCHECK(thread_checker_.CalledOnValidThread());
101
102 return sink.last_update_time +
103 base::TimeDelta::FromSeconds(kSinkAliveTimeoutSecs) >
104 base::Time::Now();
105 }
106
107 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698