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

Unified Diff: chrome/browser/media/router/presentation_frame_map.cc

Issue 1132903002: [MediaRouter] Add implementation of PresentationServiceDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/router/presentation_frame_map.cc
diff --git a/chrome/browser/media/router/presentation_frame_map.cc b/chrome/browser/media/router/presentation_frame_map.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1dbdfcdc7b5381d312b87847d16b32a035103ad1
--- /dev/null
+++ b/chrome/browser/media/router/presentation_frame_map.cc
@@ -0,0 +1,106 @@
+// 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/media/router/presentation_frame_map.h"
+
+#include "chrome/browser/media/router/media_router.h"
+#include "chrome/browser/media/router/media_router_impl_factory.h"
+#include "chrome/browser/media/router/presentation_frame.h"
+#include "chrome/browser/media/router/presentation_media_sinks_observer.h"
+
+namespace media_router {
+
+PresentationFrameMap::PresentationFrameMap(content::WebContents* web_contents)
+ : web_contents_(web_contents),
+ router_(MediaRouterImplFactory::GetMediaRouterForBrowserContext(
+ web_contents_->GetBrowserContext())) {
+ DCHECK(router_);
+}
+
+PresentationFrameMap::~PresentationFrameMap() {
+}
+
+bool PresentationFrameMap::AddScreenAvailabilityListener(
+ int render_process_id,
+ int render_frame_id,
+ content::PresentationScreenAvailabilityListener* listener) {
+ if (num_sink_observers_ >= kMaxNumSources) {
mark a. foltz 2015/05/14 22:20:45 I would rename this to num_screen_availability_lis
haibinlu 2015/05/15 23:32:29 Done.
+ return false;
+ }
+
+ RenderFrameHostId rfh_id(render_process_id, render_frame_id);
+ auto frame = GetOrAddFrame(rfh_id);
mark a. foltz 2015/05/14 22:20:45 presentation_frame here and below (so as not to co
haibinlu 2015/05/15 23:32:29 Done.
+ if (frame->AddScreenAvailabilityListener(listener)) {
+ num_sink_observers_++;
+ return true;
+ }
+ return false;
+}
+
+void PresentationFrameMap::RemoveScreenAvailabilityListener(
+ int render_process_id,
+ int render_frame_id,
+ content::PresentationScreenAvailabilityListener* listener) {
+ DCHECK(listener);
+
+ RenderFrameHostId rfh_id(render_process_id, render_frame_id);
+ auto frame = frames_.get(rfh_id);
+ if (frame && frame->RemoveScreenAvailabilityListener(listener)) {
+ num_sink_observers_--;
+ return true;
+ }
+ return false;
+}
+
+void PresentationFrameMap::SetDefaultPresentationInfo(
+ int render_process_id,
+ int render_frame_id,
+ const std::string& default_presentation_url,
+ const std::string& default_presentation_id) {
+ RenderFrameHostId rfh_id(render_process_id, render_frame_id);
+ auto frame = GetOrAddFrame(rfh_id);
+ frame->SetDefaultPresentationInfo(default_presentation_url,
+ default_presentation_id);
+}
+
+std::string PresentationFrameMap::GetDefaultPresentationId(
+ RenderFrameHostId rfh_id) const {
+ auto frame = frames_.get(rfh_id);
+ return frame ? frame->GetDefaultPresentationId() : "";
+}
+
+void PresentationFrameMap::SetDelegateObserver(
+ int render_process_id,
+ int render_frame_id,
+ content::PresentationServiceDelegate::Observer* observer) {
+ RenderFrameHostId rfh_id(render_process_id, render_frame_id);
+ auto frame = GetOrAddFrame(rfh_id);
+ frame->SetDelegateObserver(observer);
+}
+
+DelegateObserver* PresentationFrameMap::GetDelegateObserver(
+ RenderFrameHostId rfh_id) const {
+ auto frame = frames_.get(rfh_id);
+ return frame ? frame->GetDelegateObserver(observer) : NULL;
+}
+
+void PresentationFrameMap::Reset(int render_process_id, int render_frame_id) {
+ RenderFrameHostId rfh_id(render_process_id, render_frame_id);
+ auto frame = frames_.get(rfh_id);
+ if (frame) {
mark a. foltz 2015/05/14 22:20:45 Omit { } on single-line if's
+ frame->Reset();
+ }
+}
+
+scoped_ptr<PresentationFrame>* PresentationFrameMap::GetOrAddFrame(
+ RenderFrameHostId rfh_id) {
+ auto frame = frames_.get(rfh_id);
+ if (!frames_.contains(rfh_id)) {
+ frames_.add(rfh_id,
+ scoped_ptr<PresentationFrame>(new PresentationFrame(web_contents));
+ }
+ return frames_.get(rfh_id);
+}
+
+} // namespace media_router

Powered by Google App Engine
This is Rietveld 408576698