author | Gina Yeh <gyeh@mozilla.com> |
Thu, 23 Aug 2012 14:14:20 +0800 | |
changeset 108611 | 167fdd4db264a8bd9dea4295c6131175262045eb |
parent 108610 | 2a645c4ea73f4401e30ae3a74fceaa16e1238595 |
child 108612 | 165cd64fb08ab25f43421e72df7a14fbfab7e4a2 |
push id | 1490 |
push user | akeybl@mozilla.com |
push date | Mon, 08 Oct 2012 18:29:50 +0000 |
treeherder | mozilla-beta@f335e7dacdc1 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | qdot, mrbkap |
bugs | 783934 |
milestone | 17.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/bluetooth/BluetoothDevice.cpp +++ b/dom/bluetooth/BluetoothDevice.cpp @@ -25,23 +25,27 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(Bluetooth NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(BluetoothDevice, nsDOMEventTargetHelper) NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mJsUuids) NS_IMPL_CYCLE_COLLECTION_TRACE_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(BluetoothDevice, nsDOMEventTargetHelper) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS - NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(propertychanged) + NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(propertychanged) + NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(connected) + NS_CYCLE_COLLECTION_TRAVERSE_EVENT_HANDLER(disconnected) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(BluetoothDevice, nsDOMEventTargetHelper) tmp->Unroot(); - NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(propertychanged) + NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(propertychanged) + NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(connected) + NS_CYCLE_COLLECTION_UNLINK_EVENT_HANDLER(disconnected) NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(BluetoothDevice) NS_INTERFACE_MAP_ENTRY(nsIDOMBluetoothDevice) NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(BluetoothDevice) NS_INTERFACE_MAP_END_INHERITING(nsDOMEventTargetHelper) NS_IMPL_ADDREF_INHERITED(BluetoothDevice, nsDOMEventTargetHelper) @@ -165,19 +169,39 @@ BluetoothDevice::Create(nsPIDOMWindow* a void BluetoothDevice::Notify(const BluetoothSignal& aData) { if (aData.name().EqualsLiteral("PropertyChanged")) { // Get BluetoothNamedValue, make sure array length is 1 BluetoothNamedValue v = aData.value().get_ArrayOfBluetoothNamedValue()[0]; nsString name = v.name(); - SetPropertyByValue(v); - nsRefPtr<BluetoothPropertyEvent> e = BluetoothPropertyEvent::Create(name); - e->Dispatch(ToIDOMEventTarget(), NS_LITERAL_STRING("propertychanged")); + + if (name.EqualsLiteral("Connected")) { + bool isConnected = v.value(); + nsRefPtr<nsDOMEvent> event = new nsDOMEvent(nullptr, nullptr); + nsresult rv; + if (isConnected) { + rv = event->InitEvent(NS_LITERAL_STRING("connected"), false, false); + } else { + rv = event->InitEvent(NS_LITERAL_STRING("disconnected"), false, false); + } + if (NS_FAILED(rv)) { + NS_WARNING("Failed to init the connected/disconnected event!!!"); + return; + } + + event->SetTrusted(true); + bool dummy; + DispatchEvent(event, &dummy); + } else { + SetPropertyByValue(v); + nsRefPtr<BluetoothPropertyEvent> e = BluetoothPropertyEvent::Create(name); + e->Dispatch(ToIDOMEventTarget(), NS_LITERAL_STRING("propertychanged")); + } } else { #ifdef DEBUG nsCString warningMsg; warningMsg.AssignLiteral("Not handling device signal: "); warningMsg.Append(NS_ConvertUTF16toUTF8(aData.name())); NS_WARNING(warningMsg.get()); #endif } @@ -226,8 +250,10 @@ BluetoothDevice::GetUuids(JSContext* aCx } else { NS_WARNING("UUIDs not yet set!\n"); return NS_ERROR_FAILURE; } return NS_OK; } NS_IMPL_EVENT_HANDLER(BluetoothDevice, propertychanged) +NS_IMPL_EVENT_HANDLER(BluetoothDevice, connected) +NS_IMPL_EVENT_HANDLER(BluetoothDevice, disconnected)
--- a/dom/bluetooth/BluetoothDevice.h +++ b/dom/bluetooth/BluetoothDevice.h @@ -70,13 +70,15 @@ private: nsString mName; uint32_t mClass; bool mConnected; bool mPaired; bool mIsRooted; nsTArray<nsString> mUuids; NS_DECL_EVENT_HANDLER(propertychanged) + NS_DECL_EVENT_HANDLER(connected) + NS_DECL_EVENT_HANDLER(disconnected) }; END_BLUETOOTH_NAMESPACE #endif
--- a/dom/bluetooth/nsIDOMBluetoothDevice.idl +++ b/dom/bluetooth/nsIDOMBluetoothDevice.idl @@ -1,19 +1,21 @@ /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsIDOMEventTarget.idl" -[scriptable, builtinclass, uuid(24c64513-9587-46c6-b718-bb9b9a754b0d)] +[scriptable, builtinclass, uuid(647bb64c-8d45-4642-b86b-b3b80d4c8c25)] interface nsIDOMBluetoothDevice : nsIDOMEventTarget { readonly attribute DOMString address; readonly attribute DOMString name; [binaryname(DeviceClass)] readonly attribute unsigned long class; [implicit_jscontext] readonly attribute jsval uuids; readonly attribute bool connected; readonly attribute bool paired; attribute nsIDOMEventListener onpropertychanged; + attribute nsIDOMEventListener onconnected; + attribute nsIDOMEventListener ondisconnected; };