Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #include "nsString.h"
8 : #include "nsTHashtable.h"
9 : #include "nsClassHashtable.h"
10 : #include "nsIUUIDGenerator.h"
11 : #include "jsapi.h"
12 : #include "mozilla/StaticPtr.h"
13 : #include "mozilla/Logging.h"
14 : #include "nsComponentManagerUtils.h"
15 : #include "nsServiceManagerUtils.h"
16 :
17 : #include "mozilla/dom/FlyWebDiscoveryManager.h"
18 : #include "mozilla/dom/FlyWebDiscoveryManagerBinding.h"
19 : #include "mozilla/dom/Element.h"
20 :
21 : namespace mozilla {
22 : namespace dom {
23 :
24 : static LazyLogModule gFlyWebDiscoveryManagerLog("FlyWebDiscoveryManager");
25 : #undef LOG_I
26 : #define LOG_I(...) MOZ_LOG(mozilla::dom::gFlyWebDiscoveryManagerLog, mozilla::LogLevel::Debug, (__VA_ARGS__))
27 : #undef LOG_E
28 : #define LOG_E(...) MOZ_LOG(mozilla::dom::gFlyWebDiscoveryManagerLog, mozilla::LogLevel::Error, (__VA_ARGS__))
29 :
30 :
31 0 : NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(FlyWebDiscoveryManager)
32 :
33 0 : NS_IMPL_CYCLE_COLLECTING_ADDREF(FlyWebDiscoveryManager)
34 0 : NS_IMPL_CYCLE_COLLECTING_RELEASE(FlyWebDiscoveryManager)
35 0 : NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(FlyWebDiscoveryManager)
36 0 : NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
37 0 : NS_INTERFACE_MAP_ENTRY(nsISupports)
38 0 : NS_INTERFACE_MAP_END
39 :
40 0 : FlyWebDiscoveryManager::FlyWebDiscoveryManager(nsISupports* aParent,
41 0 : FlyWebService* aService)
42 : : mParent(aParent)
43 : , mService(aService)
44 0 : , mNextId(0)
45 : {
46 0 : }
47 :
48 0 : FlyWebDiscoveryManager::~FlyWebDiscoveryManager()
49 : {
50 0 : mService->UnregisterDiscoveryManager(this);
51 0 : }
52 :
53 : JSObject*
54 0 : FlyWebDiscoveryManager::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
55 : {
56 0 : return FlyWebDiscoveryManagerBinding::Wrap(aCx, this, aGivenProto);
57 : }
58 :
59 : nsISupports*
60 0 : FlyWebDiscoveryManager::GetParentObject() const
61 : {
62 0 : return mParent;
63 : }
64 :
65 : /* static */ already_AddRefed<FlyWebDiscoveryManager>
66 0 : FlyWebDiscoveryManager::Constructor(const GlobalObject& aGlobal, ErrorResult& rv)
67 : {
68 0 : RefPtr<FlyWebService> service = FlyWebService::GetOrCreate();
69 0 : if (!service) {
70 0 : return nullptr;
71 : }
72 :
73 : RefPtr<FlyWebDiscoveryManager> result = new FlyWebDiscoveryManager(
74 0 : aGlobal.GetAsSupports(), service);
75 0 : return result.forget();
76 : }
77 :
78 : void
79 0 : FlyWebDiscoveryManager::ListServices(nsTArray<FlyWebDiscoveredService>& aServices)
80 : {
81 0 : return mService->ListDiscoveredServices(aServices);
82 : }
83 :
84 : uint32_t
85 0 : FlyWebDiscoveryManager::StartDiscovery(FlyWebDiscoveryCallback& aCallback)
86 : {
87 0 : uint32_t id = GenerateId();
88 0 : mCallbackMap.Put(id, &aCallback);
89 0 : mService->RegisterDiscoveryManager(this);
90 0 : return id;
91 : }
92 :
93 : void
94 0 : FlyWebDiscoveryManager::StopDiscovery(uint32_t aId)
95 : {
96 0 : mCallbackMap.Remove(aId);
97 0 : if (mCallbackMap.Count() == 0) {
98 0 : mService->UnregisterDiscoveryManager(this);
99 : }
100 0 : }
101 :
102 : void
103 0 : FlyWebDiscoveryManager::PairWithService(const nsAString& aServiceId,
104 : FlyWebPairingCallback& aCallback)
105 : {
106 0 : mService->PairWithService(aServiceId, aCallback);
107 0 : }
108 :
109 : void
110 0 : FlyWebDiscoveryManager::NotifyDiscoveredServicesChanged()
111 : {
112 0 : nsTArray<FlyWebDiscoveredService> services;
113 0 : ListServices(services);
114 0 : Sequence<FlyWebDiscoveredService> servicesSeq;
115 0 : servicesSeq.SwapElements(services);
116 0 : for (auto iter = mCallbackMap.Iter(); !iter.Done(); iter.Next()) {
117 0 : FlyWebDiscoveryCallback *callback = iter.UserData();
118 0 : ErrorResult err;
119 0 : callback->OnDiscoveredServicesChanged(servicesSeq, err);
120 0 : ENSURE_SUCCESS_VOID(err);
121 : }
122 : }
123 :
124 :
125 : } // namespace dom
126 : } // namespace mozilla
|