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

Side by Side Diff: extensions/browser/api/display_source/display_source_event_router.cc

Issue 1410093008: Introduce chrome.displaySource API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from Antony Created 5 years, 1 month 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 2015 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 "extensions/browser/api/display_source/display_source_event_router.h"
6
7 #include "content/public/browser/browser_context.h"
8 #include "extensions/browser/api/display_source/display_source_api.h"
9 #include "extensions/browser/api/display_source/display_source_connection_delega te_factory.h"
10 #include "extensions/common/api/display_source.h"
11
12 namespace extensions {
13
14 DisplaySourceEventRouter::DisplaySourceEventRouter(
15 content::BrowserContext* browser_context)
16 : browser_context_(browser_context), listening_(false) {
17 EventRouter* event_router = EventRouter::Get(browser_context_);
18 if (!event_router)
19 return;
20 event_router->RegisterObserver(
21 this, api::display_source::OnSinksUpdated::kEventName);
22 }
23
24 DisplaySourceEventRouter::~DisplaySourceEventRouter() {
25 DCHECK(!listening_);
26 }
27
28 void DisplaySourceEventRouter::Shutdown() {
29 EventRouter* event_router = EventRouter::Get(browser_context_);
30 if (event_router)
31 event_router->UnregisterObserver(this);
32
33 if (!listening_)
34 return;
35 listening_ = false;
36 DisplaySourceConnectionDelegate* delegate =
37 DisplaySourceConnectionDelegateFactory::GetForBrowserContext(
38 browser_context_);
39 if (delegate)
40 delegate->RemoveObserver(this);
41 }
42
43 void DisplaySourceEventRouter::OnListenerAdded(
44 const EventListenerInfo& details) {
45 StartOrStopListeningForSinksChanges();
46 }
47
48 void DisplaySourceEventRouter::OnListenerRemoved(
49 const EventListenerInfo& details) {
50 StartOrStopListeningForSinksChanges();
51 }
52
53 void DisplaySourceEventRouter::StartOrStopListeningForSinksChanges() {
54 EventRouter* event_router = EventRouter::Get(browser_context_);
55 if (!event_router)
56 return;
57
58 bool should_listen = event_router->HasEventListener(
59 api::display_source::OnSinksUpdated::kEventName);
60 if (should_listen && !listening_) {
61 DisplaySourceConnectionDelegate* delegate =
62 DisplaySourceConnectionDelegateFactory::GetForBrowserContext(
63 browser_context_);
64 if (delegate) {
65 delegate->AddObserver(this);
66 delegate->StartWatchingSinks();
67 }
68 }
69 if (!should_listen && listening_) {
70 DisplaySourceConnectionDelegate* delegate =
71 DisplaySourceConnectionDelegateFactory::GetForBrowserContext(
72 browser_context_);
73 if (delegate) {
74 delegate->RemoveObserver(this);
75 delegate->StopWatchingSinks();
76 }
77 }
78
79 listening_ = should_listen;
80 }
81
82 void DisplaySourceEventRouter::OnSinksUpdated(
83 const DisplaySourceSinkInfoList& sinks) {
84 EventRouter* event_router = EventRouter::Get(browser_context_);
85 if (!event_router)
86 return;
87 scoped_ptr<base::ListValue> args(
88 api::display_source::OnSinksUpdated::Create(sinks));
89 scoped_ptr<Event> sinks_updated_event(
90 new Event(events::DISPLAY_SOURCE_ON_SINKS_UPDATED,
91 api::display_source::OnSinksUpdated::kEventName, args.Pass()));
92 event_router->BroadcastEvent(sinks_updated_event.Pass());
93 }
94
95 DisplaySourceEventRouter* DisplaySourceEventRouter::Create(
96 content::BrowserContext* browser_context) {
97 return new DisplaySourceEventRouter(browser_context);
98 }
99
100 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698