gecko-dev/dom/xml/XMLStylesheetProcessingInstruction.cpp
Birunthan Mohanathas 0c516988d6 Bug 946065 - Part 6: Move content/xml/ to dom/ and flatten subdirectories. r=jst
--HG--
rename : content/xml/content/src/CDATASection.cpp => dom/xml/CDATASection.cpp
rename : content/xml/content/src/CDATASection.h => dom/xml/CDATASection.h
rename : content/xml/content/src/ProcessingInstruction.cpp => dom/xml/ProcessingInstruction.cpp
rename : content/xml/content/src/ProcessingInstruction.h => dom/xml/ProcessingInstruction.h
rename : content/xml/document/src/XMLDocument.cpp => dom/xml/XMLDocument.cpp
rename : content/xml/document/src/XMLDocument.h => dom/xml/XMLDocument.h
rename : content/xml/content/src/XMLStylesheetProcessingInstruction.cpp => dom/xml/XMLStylesheetProcessingInstruction.cpp
rename : content/xml/content/src/XMLStylesheetProcessingInstruction.h => dom/xml/XMLStylesheetProcessingInstruction.h
rename : content/xml/document/crashtests/136896-1.xml => dom/xml/crashtests/136896-1.xml
rename : content/xml/document/crashtests/185285-1.xml => dom/xml/crashtests/185285-1.xml
rename : content/xml/document/crashtests/382636-1.xml => dom/xml/crashtests/382636-1.xml
rename : content/xml/document/crashtests/382636-2.svg => dom/xml/crashtests/382636-2.svg
rename : content/xml/document/crashtests/382636-3.xhtml => dom/xml/crashtests/382636-3.xhtml
rename : content/xml/document/crashtests/382636-4.xul => dom/xml/crashtests/382636-4.xul
rename : content/xml/content/crashtest/420429.xul => dom/xml/crashtests/420429.xul
rename : content/xml/document/crashtests/431703-1.xhtml => dom/xml/crashtests/431703-1.xhtml
rename : content/xml/content/crashtest/453278-frame.xml => dom/xml/crashtests/453278-frame.xml
rename : content/xml/content/crashtest/453278.html => dom/xml/crashtests/453278.html
rename : content/xml/content/crashtest/803586.xhtml => dom/xml/crashtests/803586.xhtml
rename : content/xml/document/crashtests/994740-1.xhtml => dom/xml/crashtests/994740-1.xhtml
rename : content/xml/document/crashtests/crashtests.list => dom/xml/crashtests/crashtests.list
rename : content/xml/document/crashtests/tree.gif => dom/xml/crashtests/tree.gif
rename : content/xml/content/src/htmlmathml-f.ent => dom/xml/htmlmathml-f.ent
rename : content/xml/content/src/moz.build => dom/xml/moz.build
rename : content/xml/document/public/nsIXMLContentSink.h => dom/xml/nsIXMLContentSink.h
rename : content/xml/document/src/nsXMLContentSink.cpp => dom/xml/nsXMLContentSink.cpp
rename : content/xml/document/src/nsXMLContentSink.h => dom/xml/nsXMLContentSink.h
rename : content/xml/content/src/nsXMLElement.cpp => dom/xml/nsXMLElement.cpp
rename : content/xml/content/src/nsXMLElement.h => dom/xml/nsXMLElement.h
rename : content/xml/document/src/nsXMLFragmentContentSink.cpp => dom/xml/nsXMLFragmentContentSink.cpp
rename : content/xml/document/src/nsXMLPrettyPrinter.cpp => dom/xml/nsXMLPrettyPrinter.cpp
rename : content/xml/document/src/nsXMLPrettyPrinter.h => dom/xml/nsXMLPrettyPrinter.h
rename : content/xml/document/resources/XMLMonoPrint.css => dom/xml/resources/XMLMonoPrint.css
rename : content/xml/document/resources/XMLPrettyPrint.css => dom/xml/resources/XMLPrettyPrint.css
rename : content/xml/document/resources/XMLPrettyPrint.xml => dom/xml/resources/XMLPrettyPrint.xml
rename : content/xml/document/resources/XMLPrettyPrint.xsl => dom/xml/resources/XMLPrettyPrint.xsl
rename : content/xml/document/resources/jar.mn => dom/xml/resources/jar.mn
rename : content/xml/document/resources/moz.build => dom/xml/resources/moz.build
rename : content/xml/document/test/file_bug293347.xml => dom/xml/test/file_bug293347.xml
rename : content/xml/document/test/file_bug293347xslt.xml => dom/xml/test/file_bug293347xslt.xml
rename : content/xml/document/test/mochitest.ini => dom/xml/test/mochitest.ini
rename : content/xml/document/test/moz.build => dom/xml/test/moz.build
rename : content/xml/tests/books/bethlehem.gif => dom/xml/test/old/books/bethlehem.gif
rename : content/xml/tests/books/bill.gif => dom/xml/test/old/books/bill.gif
rename : content/xml/tests/books/books.js => dom/xml/test/old/books/books.js
rename : content/xml/tests/books/books.xml => dom/xml/test/old/books/books.xml
rename : content/xml/tests/books/charing.gif => dom/xml/test/old/books/charing.gif
rename : content/xml/tests/books/classic.css => dom/xml/test/old/books/classic.css
rename : content/xml/tests/books/common.css => dom/xml/test/old/books/common.css
rename : content/xml/tests/books/kerouac.gif => dom/xml/test/old/books/kerouac.gif
rename : content/xml/tests/books/list.css => dom/xml/test/old/books/list.css
rename : content/xml/tests/books/road.gif => dom/xml/test/old/books/road.gif
rename : content/xml/tests/books/welville.gif => dom/xml/test/old/books/welville.gif
rename : content/xml/tests/docbook.css => dom/xml/test/old/docbook.css
rename : content/xml/tests/docbooktest.xml => dom/xml/test/old/docbooktest.xml
rename : content/xml/tests/flamer.gif => dom/xml/test/old/flamer.gif
rename : content/xml/tests/load/display.css => dom/xml/test/old/load/display.css
rename : content/xml/tests/load/display.xml => dom/xml/test/old/load/display.xml
rename : content/xml/tests/load/load.html => dom/xml/test/old/load/load.html
rename : content/xml/tests/load/loadauth.html => dom/xml/test/old/load/loadauth.html
rename : content/xml/tests/load/loaddisplay.html => dom/xml/test/old/load/loaddisplay.html
rename : content/xml/tests/load/test.xml => dom/xml/test/old/load/test.xml
rename : content/xml/tests/script.xml => dom/xml/test/old/script.xml
rename : content/xml/tests/simple.xml => dom/xml/test/old/simple.xml
rename : content/xml/tests/toc/book.css => dom/xml/test/old/toc/book.css
rename : content/xml/tests/toc/irslogo.gif => dom/xml/test/old/toc/irslogo.gif
rename : content/xml/tests/toc/minus.gif => dom/xml/test/old/toc/minus.gif
rename : content/xml/tests/toc/plus.gif => dom/xml/test/old/toc/plus.gif
rename : content/xml/tests/toc/rights.xml => dom/xml/test/old/toc/rights.xml
rename : content/xml/tests/toc/toc.css => dom/xml/test/old/toc/toc.css
rename : content/xml/tests/toc/toc.js => dom/xml/test/old/toc/toc.js
rename : content/xml/tests/xlink/auto.xml => dom/xml/test/old/xlink/auto.xml
rename : content/xml/tests/xlink/link.css => dom/xml/test/old/xlink/link.css
rename : content/xml/tests/xlink/manual.xml => dom/xml/test/old/xlink/manual.xml
rename : content/xml/tests/xmlbase/xmlbase.css => dom/xml/test/old/xmlbase/xmlbase.css
rename : content/xml/tests/xmlbase/xmlbase.xml => dom/xml/test/old/xmlbase/xmlbase.xml
rename : content/xml/document/test/test_bug232004.xhtml => dom/xml/test/test_bug232004.xhtml
rename : content/xml/document/test/test_bug293347.html => dom/xml/test/test_bug293347.html
rename : content/xml/document/test/test_bug343870.xhtml => dom/xml/test/test_bug343870.xhtml
rename : content/xml/document/test/test_bug355213.xhtml => dom/xml/test/test_bug355213.xhtml
rename : content/xml/document/test/test_bug392338.html => dom/xml/test/test_bug392338.html
rename : content/xml/document/test/test_bug399502.xhtml => dom/xml/test/test_bug399502.xhtml
rename : content/xml/document/test/test_bug445330.html => dom/xml/test/test_bug445330.html
rename : content/xml/document/test/test_bug691215.html => dom/xml/test/test_bug691215.html
rename : content/xml/document/test/test_viewport.xhtml => dom/xml/test/test_viewport.xhtml
2014-07-25 14:15:35 -07:00

196 lines
6.0 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 "XMLStylesheetProcessingInstruction.h"
#include "mozilla/dom/XMLStylesheetProcessingInstructionBinding.h"
#include "nsContentUtils.h"
#include "nsNetUtil.h"
namespace mozilla {
namespace dom {
// nsISupports implementation
NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(XMLStylesheetProcessingInstruction)
NS_INTERFACE_TABLE_INHERITED(XMLStylesheetProcessingInstruction, nsIDOMNode,
nsIDOMProcessingInstruction,
nsIStyleSheetLinkingElement)
NS_INTERFACE_TABLE_TAIL_INHERITING(ProcessingInstruction)
NS_IMPL_ADDREF_INHERITED(XMLStylesheetProcessingInstruction,
ProcessingInstruction)
NS_IMPL_RELEASE_INHERITED(XMLStylesheetProcessingInstruction,
ProcessingInstruction)
NS_IMPL_CYCLE_COLLECTION_CLASS(XMLStylesheetProcessingInstruction)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(XMLStylesheetProcessingInstruction,
ProcessingInstruction)
tmp->nsStyleLinkElement::Traverse(cb);
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(XMLStylesheetProcessingInstruction,
ProcessingInstruction)
tmp->nsStyleLinkElement::Unlink();
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
XMLStylesheetProcessingInstruction::~XMLStylesheetProcessingInstruction()
{
}
JSObject*
XMLStylesheetProcessingInstruction::WrapNode(JSContext *aCx)
{
return XMLStylesheetProcessingInstructionBinding::Wrap(aCx, this);
}
// nsIContent
nsresult
XMLStylesheetProcessingInstruction::BindToTree(nsIDocument* aDocument,
nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers)
{
nsresult rv = ProcessingInstruction::BindToTree(aDocument, aParent,
aBindingParent,
aCompileEventHandlers);
NS_ENSURE_SUCCESS(rv, rv);
void (XMLStylesheetProcessingInstruction::*update)() =
&XMLStylesheetProcessingInstruction::UpdateStyleSheetInternal;
nsContentUtils::AddScriptRunner(NS_NewRunnableMethod(this, update));
return rv;
}
void
XMLStylesheetProcessingInstruction::UnbindFromTree(bool aDeep, bool aNullParent)
{
nsCOMPtr<nsIDocument> oldDoc = GetCurrentDoc();
ProcessingInstruction::UnbindFromTree(aDeep, aNullParent);
UpdateStyleSheetInternal(oldDoc, nullptr);
}
// nsIDOMNode
void
XMLStylesheetProcessingInstruction::SetNodeValueInternal(const nsAString& aNodeValue,
ErrorResult& aError)
{
nsGenericDOMDataNode::SetNodeValueInternal(aNodeValue, aError);
if (!aError.Failed()) {
UpdateStyleSheetInternal(nullptr, nullptr, true);
}
}
// nsStyleLinkElement
NS_IMETHODIMP
XMLStylesheetProcessingInstruction::GetCharset(nsAString& aCharset)
{
return GetAttrValue(nsGkAtoms::charset, aCharset) ? NS_OK : NS_ERROR_FAILURE;
}
/* virtual */ void
XMLStylesheetProcessingInstruction::OverrideBaseURI(nsIURI* aNewBaseURI)
{
mOverriddenBaseURI = aNewBaseURI;
}
already_AddRefed<nsIURI>
XMLStylesheetProcessingInstruction::GetStyleSheetURL(bool* aIsInline)
{
*aIsInline = false;
nsAutoString href;
if (!GetAttrValue(nsGkAtoms::href, href)) {
return nullptr;
}
nsIURI *baseURL;
nsAutoCString charset;
nsIDocument *document = OwnerDoc();
baseURL = mOverriddenBaseURI ?
mOverriddenBaseURI.get() :
document->GetDocBaseURI();
charset = document->GetDocumentCharacterSet();
nsCOMPtr<nsIURI> aURI;
NS_NewURI(getter_AddRefs(aURI), href, charset.get(), baseURL);
return aURI.forget();
}
void
XMLStylesheetProcessingInstruction::GetStyleSheetInfo(nsAString& aTitle,
nsAString& aType,
nsAString& aMedia,
bool* aIsScoped,
bool* aIsAlternate)
{
aTitle.Truncate();
aType.Truncate();
aMedia.Truncate();
*aIsScoped = false;
*aIsAlternate = false;
// xml-stylesheet PI is special only in prolog
if (!nsContentUtils::InProlog(this)) {
return;
}
nsAutoString data;
GetData(data);
nsContentUtils::GetPseudoAttributeValue(data, nsGkAtoms::title, aTitle);
nsAutoString alternate;
nsContentUtils::GetPseudoAttributeValue(data,
nsGkAtoms::alternate,
alternate);
// if alternate, does it have title?
if (alternate.EqualsLiteral("yes")) {
if (aTitle.IsEmpty()) { // alternates must have title
return;
}
*aIsAlternate = true;
}
nsContentUtils::GetPseudoAttributeValue(data, nsGkAtoms::media, aMedia);
nsAutoString type;
nsContentUtils::GetPseudoAttributeValue(data, nsGkAtoms::type, type);
nsAutoString mimeType, notUsed;
nsContentUtils::SplitMimeType(type, mimeType, notUsed);
if (!mimeType.IsEmpty() && !mimeType.LowerCaseEqualsLiteral("text/css")) {
aType.Assign(type);
return;
}
// If we get here we assume that we're loading a css file, so set the
// type to 'text/css'
aType.AssignLiteral("text/css");
return;
}
nsGenericDOMDataNode*
XMLStylesheetProcessingInstruction::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const
{
nsAutoString data;
nsGenericDOMDataNode::GetData(data);
nsRefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
return new XMLStylesheetProcessingInstruction(ni.forget(), data);
}
} // namespace dom
} // namespace mozilla