Пример #1
0
nsresult
VideoDocument::CreateSyntheticVideoDocument(nsIChannel* aChannel,
        nsIStreamListener** aListener)
{
    // make our generic document
    nsresult rv = MediaDocument::CreateSyntheticDocument();
    NS_ENSURE_SUCCESS(rv, rv);

    Element* body = GetBodyElement();
    if (!body) {
        NS_WARNING("no body on video document!");
        return NS_ERROR_FAILURE;
    }

    // make content
    nsCOMPtr<nsINodeInfo> nodeInfo;
    nodeInfo = mNodeInfoManager->GetNodeInfo(nsGkAtoms::video, nsnull,
               kNameSpaceID_XHTML,
               nsIDOMNode::ELEMENT_NODE);
    NS_ENSURE_TRUE(nodeInfo, NS_ERROR_FAILURE);

    nsRefPtr<nsHTMLMediaElement> element =
        static_cast<nsHTMLMediaElement*>(NS_NewHTMLVideoElement(nodeInfo.forget(),
                                         NOT_FROM_PARSER));
    if (!element)
        return NS_ERROR_OUT_OF_MEMORY;
    element->SetAutoplay(true);
    element->SetControls(true);
    element->LoadWithChannel(aChannel, aListener);
    UpdateTitle(aChannel);

    if (nsContentUtils::IsChildOfSameType(this)) {
        // Video documents that aren't toplevel should fill their frames and
        // not have margins
        element->SetAttr(kNameSpaceID_None, nsGkAtoms::style,
                         NS_LITERAL_STRING("position:absolute; top:0; left:0; width:100%; height:100%"),
                         true);
    } else {
        Element* head = GetHeadElement();
        if (!head) {
            NS_WARNING("no head on video document!");
            return NS_ERROR_FAILURE;
        }

        nodeInfo = mNodeInfoManager->GetNodeInfo(nsGkAtoms::style, nsnull,
                   kNameSpaceID_XHTML,
                   nsIDOMNode::ELEMENT_NODE);
        NS_ENSURE_TRUE(nodeInfo, NS_ERROR_OUT_OF_MEMORY);
        nsRefPtr<nsGenericHTMLElement> styleContent = NS_NewHTMLStyleElement(nodeInfo.forget());
        NS_ENSURE_TRUE(styleContent, NS_ERROR_OUT_OF_MEMORY);

        styleContent->SetTextContent(
            NS_LITERAL_STRING("body { background: url(chrome://global/skin/icons/tabprompts-bgtexture.png) #333; height: 100%; width: 100%; margin: 0; padding: 0; } ") +
            NS_LITERAL_STRING("video { position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; box-shadow: 0 0 15px #000; } ") +
            NS_LITERAL_STRING("video:focus { outline-width: 0; } "));
        head->AppendChildTo(styleContent, false);
    }

    return body->AppendChildTo(element, false);
}
Пример #2
0
nsresult
VideoDocument::CreateSyntheticVideoDocument(nsIChannel* aChannel,
                                            nsIStreamListener** aListener)
{
  // make our generic document
  nsresult rv = MediaDocument::CreateSyntheticDocument();
  NS_ENSURE_SUCCESS(rv, rv);

  Element* body = GetBodyElement();
  if (!body) {
    NS_WARNING("no body on video document!");
    return NS_ERROR_FAILURE;
  }

  // make content
  nsCOMPtr<nsINodeInfo> nodeInfo;
  nodeInfo = mNodeInfoManager->GetNodeInfo(nsGkAtoms::video, nullptr,
                                           kNameSpaceID_XHTML,
                                           nsIDOMNode::ELEMENT_NODE);
  NS_ENSURE_TRUE(nodeInfo, NS_ERROR_FAILURE);

  nsRefPtr<nsHTMLMediaElement> element =
    static_cast<nsHTMLMediaElement*>(NS_NewHTMLVideoElement(nodeInfo.forget(),
                                                            NOT_FROM_PARSER));
  if (!element)
    return NS_ERROR_OUT_OF_MEMORY;
  element->SetAutoplay(true);
  element->SetControls(true);
  element->LoadWithChannel(aChannel, aListener);
  UpdateTitle(aChannel);

  if (nsContentUtils::IsChildOfSameType(this)) {
    // Video documents that aren't toplevel should fill their frames and
    // not have margins
    element->SetAttr(kNameSpaceID_None, nsGkAtoms::style,
        NS_LITERAL_STRING("position:absolute; top:0; left:0; width:100%; height:100%"),
        true);
  }

  return body->AppendChildTo(element, false);
}