nsresult RegisterBluetoothEventHandler(const nsCString& aNodeName, BluetoothEventObserver* aHandler) { MOZ_ASSERT(NS_IsMainThread()); BluetoothEventObserverList *ol; NS_ENSURE_TRUE(sBluetoothEventObserverTable, NS_ERROR_FAILURE); if (!sBluetoothEventObserverTable->Get(aNodeName, &ol)) { sBluetoothEventObserverTable->Put(aNodeName, new BluetoothEventObserverList()); } sBluetoothEventObserverTable->Get(aNodeName, &ol); ol->AddObserver(aHandler); return NS_OK; }
nsresult UnregisterBluetoothEventHandler(const nsCString& aNodeName, BluetoothEventObserver* aHandler) { MOZ_ASSERT(NS_IsMainThread()); BluetoothEventObserverList *ol; NS_ENSURE_TRUE(sBluetoothEventObserverTable, NS_ERROR_FAILURE); if (!sBluetoothEventObserverTable->Get(aNodeName, &ol)) { NS_WARNING("Node does not exist to remove BluetoothEventListener from!"); return NS_ERROR_FAILURE; } sBluetoothEventObserverTable->Get(aNodeName, &ol); ol->RemoveObserver(aHandler); if (ol->Length() == 0) { sBluetoothEventObserverTable->Remove(aNodeName); } return NS_OK; }
NS_IMETHOD Run() { if (dbus_message_get_path(mMsg.get()) == NULL) { return NS_OK; } MOZ_ASSERT(NS_IsMainThread()); // Notify observers that a message has been sent nsDependentCString path(dbus_message_get_path(mMsg.get())); nsDependentCString member(dbus_message_get_member(mMsg.get())); BluetoothEventObserverList *ol; if (!sBluetoothEventObserverTable->Get(path, &ol)) { LOG("No objects registered for %s, returning\n", dbus_message_get_path(mMsg.get())); return NS_OK; } BluetoothEvent e; e.mEventName = member; ol->Broadcast(e); return NS_OK; }