bubbles = bubbleStr.EqualsLiteral("true");
bubbles = !(bubbleStr.EqualsLiteral("false") || bubbleStr.EqualsLiteral("0"));
nsXFormsDispatchElement::HandleAction(nsIDOMEvent* aEvent,                                      nsIXFormsActionElement *aParentAction){  if (!mElement)    return NS_OK;    nsAutoString name;  mElement->GetAttribute(NS_LITERAL_STRING("name"), name);  if (name.IsEmpty())    return NS_OK;    nsAutoString target;  mElement->GetAttribute(NS_LITERAL_STRING("target"), target);  if (target.IsEmpty())    return NS_OK;  PRBool cancelable = PR_TRUE;  PRBool bubbles = PR_TRUE;  if (!nsXFormsUtils::IsXFormsEvent(name, cancelable, bubbles)) {    nsAutoString cancelableStr;    mElement->GetAttribute(NS_LITERAL_STRING("cancelable"), cancelableStr);    cancelable = cancelableStr.EqualsLiteral("true");        nsAutoString bubbleStr;    mElement->GetAttribute(NS_LITERAL_STRING("bubbles"), bubbleStr);    bubbles = bubbleStr.EqualsLiteral("true");    PRBool tmp;    if (cancelableStr.IsEmpty() && bubbleStr.IsEmpty())      nsXFormsUtils::GetEventDefaults(name, cancelable, bubbles);    else if (cancelableStr.IsEmpty())      nsXFormsUtils::GetEventDefaults(name, cancelable, tmp);    else if (bubbleStr.IsEmpty())      nsXFormsUtils::GetEventDefaults(name, tmp, bubbles);  }  nsCOMPtr<nsIDOMDocument> doc;  mElement->GetOwnerDocument(getter_AddRefs(doc));  if (!doc)    return NS_OK;  nsCOMPtr<nsIDOMElement> el;  doc->GetElementById(target, getter_AddRefs(el));  if (!el)    return NS_OK;    nsCOMPtr<nsIDOMDocumentEvent> docEvent = do_QueryInterface(doc);  nsCOMPtr<nsIDOMEvent> event;  docEvent->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event));  event->InitEvent(name, bubbles, cancelable);  nsCOMPtr<nsIDOMEventTarget> targetEl = do_QueryInterface(el);  if (targetEl) {    nsXFormsUtils::SetEventTrusted(event, el);    PRBool defaultActionEnabled;    targetEl->DispatchEvent(event, &defaultActionEnabled);  }  return NS_OK;}