# HG changeset patch # User Justin Lebar # Date 1269289808 25200 # Node ID e62d8b7fe4f0f7197c620d37546e06e4ae7b8c9f # Parent c1c64067eeb8655ba52f90daf14bea0b3fb29b22 imported patch resource-packages diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -27,8 +27,9 @@ _OPT\.OBJ/ # SpiderMonkey configury ^js/src/configure$ ^js/src/autom4te.cache$ # SpiderMonkey test result logs ^js/src/tests/results-.*\.(html|txt)$ # Java HTML5 parser classes ^parser/html/java/(html|java)parser/ +^parser/html/java/.*\.jar$ diff --git a/content/base/src/nsContentSink.cpp b/content/base/src/nsContentSink.cpp --- a/content/base/src/nsContentSink.cpp +++ b/content/base/src/nsContentSink.cpp @@ -70,16 +70,18 @@ #include "nsIPrincipal.h" #include "nsIScriptGlobalObject.h" #include "nsNetCID.h" #include "nsIOfflineCacheUpdate.h" #include "nsIApplicationCache.h" #include "nsIApplicationCacheContainer.h" #include "nsIApplicationCacheChannel.h" #include "nsIApplicationCacheService.h" +#include "nsIResourcePackageManagerContainer.h" +#include "nsIResourcePackageManager.h" #include "nsIScriptSecurityManager.h" #include "nsIDOMLoadStatus.h" #include "nsICookieService.h" #include "nsIPrompt.h" #include "nsServiceManagerUtils.h" #include "nsContentUtils.h" #include "nsParserUtils.h" #include "nsCRT.h" @@ -1228,16 +1230,32 @@ nsContentSink::ProcessOfflineManifest(co default: NS_ASSERTION(PR_FALSE, "Cache selection algorithm didn't decide on proper action"); break; } } void +nsContentSink::ProcessResourcePackages(const nsAString& aPackages) +{ + nsCOMPtr pacManContainer = + do_QueryInterface(mDocument); + if (!mDocument) + return; + + nsCOMPtr pacMan; + pacManContainer->GetResourcePackageManager(getter_AddRefs(pacMan)); + if (!pacMan) + return; + + pacMan->SetPackagesString(aPackages); +} + +void nsContentSink::ScrollToRef() { mDocument->ScrollToRef(); } void nsContentSink::StartLayout(PRBool aIgnorePendingSheets) { diff --git a/content/base/src/nsContentSink.h b/content/base/src/nsContentSink.h --- a/content/base/src/nsContentSink.h +++ b/content/base/src/nsContentSink.h @@ -255,16 +255,20 @@ public: // cache, let it be associated with the document and eventually // schedule the cache update process. void ProcessOfflineManifest(const nsAString& aManifestSpec); // Extracts the manifest attribute from the element if it is the root // element and calls the above method. void ProcessOfflineManifest(nsIContent *aElement); + // Inform the resource package manager of the value of the packages attribute + // on the root element. + void ProcessResourcePackages(const nsAString& aPackages); + protected: // Tries to scroll to the URI's named anchor. Once we've successfully // done that, further calls to this method will be ignored. void ScrollToRef(); // Start layout. If aIgnorePendingSheets is true, this will happen even if // we still have stylesheet loads pending. Otherwise, we'll wait until the // stylesheets are all done loading. diff --git a/content/base/src/nsDocument.cpp b/content/base/src/nsDocument.cpp --- a/content/base/src/nsDocument.cpp +++ b/content/base/src/nsDocument.cpp @@ -175,16 +175,18 @@ static NS_DEFINE_CID(kDOMEventGroupCID, #include "nsIXMLContentSink.h" #include "nsContentErrors.h" #include "nsIXULDocument.h" #include "nsIPrompt.h" #include "nsIPropertyBag2.h" #include "nsIDOMPageTransitionEvent.h" #include "nsFrameLoader.h" #include "nsEscape.h" +#include "nsIResourcePackageManagerContainer.h" +#include "nsIResourcePackageChannel.h" #ifdef MOZ_MEDIA #include "nsHTMLMediaElement.h" #endif // MOZ_MEDIA #include "mozAutoDocUpdate.h" #include "nsGlobalWindow.h" #ifdef MOZ_SMIL @@ -1092,17 +1094,17 @@ nsExternalResourceMap::LoadgroupCallback *aSink = nsnull; TRY_SHIM(nsILoadContext); TRY_SHIM(nsIProgressEventSink); TRY_SHIM(nsIChannelEventSink); TRY_SHIM(nsISecurityEventSink); TRY_SHIM(nsIApplicationCacheContainer); - + return NS_NOINTERFACE; } #undef TRY_SHIM #undef IID_IS nsExternalResourceMap::ExternalResource::~ExternalResource() { @@ -1540,16 +1542,17 @@ NS_INTERFACE_TABLE_HEAD(nsDocument) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIScriptObjectPrincipal) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOM3EventTarget) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIDOMNSEventTarget) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsPIDOMEventTarget) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsISupportsWeakReference) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIRadioGroupContainer) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIMutationObserver) NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIApplicationCacheContainer) + NS_INTERFACE_TABLE_ENTRY(nsDocument, nsIResourcePackageManagerContainer) NS_OFFSET_AND_INTERFACE_TABLE_END NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsDocument) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Node, new nsNode3Tearoff(this)) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMXPathNSResolver, new nsNode3Tearoff(this)) NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOMNodeSelector, new nsNodeSelectorTearoff(this)) @@ -1663,16 +1666,17 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN( NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mCachedRootElement) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(mNodeInfoManager, nsNodeInfoManager) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSecurityInfo) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mDisplayDocument) // Traverse all nsDocument nsCOMPtrs. NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mParser) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mResourcePackageManager) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mScriptGlobalObject) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mListenerManager) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mDOMStyleSheets) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mScriptLoader) tmp->mRadioGroups.EnumerateRead(RadioGroupsTraverser, &cb); // The boxobject for an element will only exist as long as it's in the @@ -2160,20 +2164,30 @@ nsDocument::StartDocumentLoad(const char semicolon = start; FindCharInReadable(';', semicolon, end); SetContentTypeInternal(Substring(start, semicolon)); } RetrieveRelevantHeaders(aChannel); mChannel = aChannel; - + nsresult rv = InitCSP(); NS_ENSURE_SUCCESS(rv, rv); + mResourcePackageManager = + do_CreateInstance("@mozilla.org/network/resource-package-manager;1", &rv); + if (mResourcePackageManager) { + mResourcePackageManager->SetDocument(this); + } + else { + NS_WARNING("Failed to initialize resource package manager " + "(was it disabled in configure?)"); + } + return NS_OK; } nsresult nsDocument::InitCSP() { if (gCSPEnabled) { nsAutoString cspHeaderValue; @@ -7531,16 +7545,31 @@ nsDocument::UnsuppressEventHandlingAndFi } nsISupports* nsDocument::GetCurrentContentSink() { return mParser ? mParser->GetContentSink() : nsnull; } +NS_IMETHODIMP +nsDocument::GetResourcePackageManager(nsIResourcePackageManager **out) +{ + NS_ENSURE_ARG_POINTER(out); + NS_IF_ADDREF(*out = mResourcePackageManager); + return NS_OK; +} + +NS_IMETHODIMP +nsDocument::SetResourcePackageManager(nsIResourcePackageManager *aPacMan) +{ + mResourcePackageManager = aPacMan; + return NS_OK; +} + void nsDocument::RegisterFileDataUri(nsACString& aUri) { mFileDataUris.AppendElement(aUri); } void nsDocument::SetScrollToRef(nsIURI *aDocumentURI) diff --git a/content/base/src/nsDocument.h b/content/base/src/nsDocument.h --- a/content/base/src/nsDocument.h +++ b/content/base/src/nsDocument.h @@ -90,16 +90,19 @@ #include "nsTObserverArray.h" #include "nsStubMutationObserver.h" #include "nsIChannel.h" #include "nsCycleCollectionParticipant.h" #include "nsContentList.h" #include "nsGkAtoms.h" #include "nsIApplicationCache.h" #include "nsIApplicationCacheContainer.h" +#include "nsIResourcePackageManagerContainer.h" +#include "nsIResourcePackageManager.h" + #include "nsStyleSet.h" #include "pldhash.h" #include "nsAttrAndChildArray.h" #include "nsDOMAttributeMap.h" #include "nsContentUtils.h" #include "nsThreadUtils.h" #include "nsIDocumentViewer.h" #include "nsIDOMXPathNSResolver.h" @@ -492,16 +495,17 @@ class nsDocument : public nsIDocument, public nsIDOM3Document, public nsSupportsWeakReference, public nsIDOMEventTarget, public nsIDOM3EventTarget, public nsIDOMNSEventTarget, public nsIScriptObjectPrincipal, public nsIRadioGroupContainer, public nsIApplicationCacheContainer, + public nsIResourcePackageManagerContainer, public nsStubMutationObserver { public: typedef mozilla::dom::Element Element; NS_DECL_CYCLE_COLLECTING_ISUPPORTS using nsINode::GetScriptTypeID; @@ -825,16 +829,19 @@ public: NS_DECL_NSIDOMNSEVENTTARGET // nsIScriptObjectPrincipal virtual nsIPrincipal* GetPrincipal(); // nsIApplicationCacheContainer NS_DECL_NSIAPPLICATIONCACHECONTAINER + // nsIResourcePackageManagerContainer + NS_DECL_NSIRESOURCEPACKAGEMANAGERCONTAINER + virtual nsresult Init(); virtual nsresult AddXMLEventsContent(nsIContent * aXMLEventsElement); virtual nsresult CreateElem(nsIAtom *aName, nsIAtom *aPrefix, PRInt32 aNamespaceID, PRBool aDocumentDefaultType, nsIContent **aResult); @@ -1041,16 +1048,20 @@ protected: // Array of owning references to all children nsAttrAndChildArray mChildren; // Pointer to our parser if we're currently in the process of being // parsed into. nsCOMPtr mParser; + // This document's resource package manager, which manages loads from + // packages listed in the element's |packages| attribute. + nsCOMPtr mResourcePackageManager; + // Weak reference to our sink for in case we no longer have a parser. This // will allow us to flush out any pending stuff from the sink even if // EndLoad() has already happened. nsWeakPtr mWeakSink; nsCOMArray mStyleSheets; nsCOMArray mCatalogSheets; diff --git a/content/base/src/nsGkAtomList.h b/content/base/src/nsGkAtomList.h --- a/content/base/src/nsGkAtomList.h +++ b/content/base/src/nsGkAtomList.h @@ -706,16 +706,17 @@ GK_ATOM(overflow, "overflow") GK_ATOM(overflowList, "Overflow-list") GK_ATOM(overflowchanged, "overflowchanged") GK_ATOM(overflowContainersList, "OverflowContainers-list") GK_ATOM(overflowOutOfFlowList, "OverflowOutOfFlow-list") GK_ATOM(overlay, "overlay") GK_ATOM(overlap, "overlap") GK_ATOM(p, "p") GK_ATOM(pack, "pack") +GK_ATOM(packages, "packages") GK_ATOM(page, "page") GK_ATOM(pageincrement, "pageincrement") GK_ATOM(pagex, "pagex") GK_ATOM(pagey, "pagey") GK_ATOM(palettename, "palettename") GK_ATOM(panel, "panel") GK_ATOM(param, "param") GK_ATOM(parameter, "parameter") diff --git a/content/html/content/src/nsHTMLSharedElement.cpp b/content/html/content/src/nsHTMLSharedElement.cpp --- a/content/html/content/src/nsHTMLSharedElement.cpp +++ b/content/html/content/src/nsHTMLSharedElement.cpp @@ -44,16 +44,18 @@ #include "nsIDOMHTMLHtmlElement.h" #include "nsGenericHTMLElement.h" #include "nsGkAtoms.h" #include "nsStyleConsts.h" #include "nsRuleData.h" #include "nsMappedAttributes.h" #include "nsNetUtil.h" #include "nsHTMLFormElement.h" +#include "nsIResourcePackageManagerContainer.h" +#include "nsIResourcePackageManager.h" // XXX nav4 has type= start= (same as OL/UL) extern nsAttrValue::EnumTable kListTypeTable[]; class nsHTMLSharedElement : public nsGenericHTMLElement, public nsIDOMHTMLIsIndexElement, public nsIDOMHTMLParamElement, public nsIDOMHTMLBaseElement, @@ -229,16 +231,17 @@ nsHTMLSharedElement::GetProfile(nsAStrin NS_IMETHODIMP nsHTMLSharedElement::SetProfile(const nsAString& aValue) { return NS_ERROR_FAILURE; } // nsIDOMHTMLHtmlElement NS_IMPL_STRING_ATTR(nsHTMLSharedElement, Version, version) +NS_IMPL_STRING_ATTR(nsHTMLSharedElement, Packages, packages) // nsIDOMHTMLBaseElement NS_IMPL_URI_ATTR(nsHTMLSharedElement, Href, href) NS_IMPL_STRING_ATTR(nsHTMLSharedElement, Target, target) PRBool nsHTMLSharedElement::ParseAttribute(PRInt32 aNamespaceID, nsIAtom* aAttribute, @@ -480,16 +483,33 @@ nsHTMLSharedElement::SetAttr(PRInt32 aNa aName == nsGkAtoms::href && aNameSpaceID == kNameSpaceID_None && IsInDoc() && (head = GetParent()) && head == GetOwnerDoc()->GetHeadElement()) { SetBaseURIUsingFirstBaseWithHref(head, this); } + // If we're modifying the element's |packages| attribute, we need to + // inform the resource package manager. + if (this == GetOwnerDoc()->GetHtmlElement() && + aName == nsGkAtoms::packages && + aNameSpaceID == kNameSpaceID_None && + IsInDoc()) { + + nsCOMPtr pacManContainer = + do_QueryInterface(GetOwnerDoc()); + if (pacManContainer) { + nsCOMPtr pacMan; + pacManContainer->GetResourcePackageManager(getter_AddRefs(pacMan)); + if (pacMan) + pacMan->SetPackagesString(aValue); + } + } + return NS_OK; } nsresult nsHTMLSharedElement::UnsetAttr(PRInt32 aNameSpaceID, nsIAtom* aName, PRBool aNotify) { nsresult rv = nsGenericHTMLElement::UnsetAttr(aNameSpaceID, aName, aNotify); @@ -503,16 +523,33 @@ nsHTMLSharedElement::UnsetAttr(PRInt32 a aName == nsGkAtoms::href && aNameSpaceID == kNameSpaceID_None && IsInDoc() && (head = GetParent()) && head == GetOwnerDoc()->GetHeadElement()) { SetBaseURIUsingFirstBaseWithHref(head, nsnull); } + // If we're unsetting the element's |packages| attribute, we need to + // inform the resource package manager. + if (this == GetOwnerDoc()->GetHtmlElement() && + aName == nsGkAtoms::packages && + aNameSpaceID == kNameSpaceID_None && + IsInDoc()) { + + nsCOMPtr pacManContainer = + do_QueryInterface(GetOwnerDoc()); + if (pacManContainer) { + nsCOMPtr pacMan; + pacManContainer->GetResourcePackageManager(getter_AddRefs(pacMan)); + if (pacMan) + pacMan->SetPackagesString(NS_LITERAL_STRING("")); + } + } + return NS_OK; } nsresult nsHTMLSharedElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent, nsIContent* aBindingParent, PRBool aCompileEventHandlers) { diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -146,16 +146,18 @@ #include "nsIPromptFactory.h" #include "nsIObserver.h" #include "nsINestedURI.h" #include "nsITransportSecurityInfo.h" #include "nsINSSErrorsService.h" #include "nsIApplicationCache.h" #include "nsIApplicationCacheChannel.h" #include "nsIApplicationCacheContainer.h" +#include "nsIResourcePackageChannel.h" +#include "nsIResourcePackageManagerContainer.h" #include "nsIPermissionManager.h" #include "nsStreamUtils.h" #include "nsIController.h" #include "nsPICommandUpdater.h" #include "nsIDOMHTMLAnchorElement.h" #include "nsIWebBrowserChrome2.h" #include "nsITabChild.h" @@ -899,16 +901,41 @@ NS_IMETHODIMP nsDocShell::GetInterface(c #if defined(PR_LOGGING) && defined(DEBUG) PR_LOG(gDocShellLog, PR_LOG_DEBUG, ("nsDocShell[%p]: returning app cache container %p", this, domDoc.get())); #endif return domDoc->QueryInterface(aIID, aSink); } + else if (aIID.Equals(NS_GET_IID(nsIResourcePackageManagerContainer))) { + *aSink = nsnull; + + // Return the resource package manager associated with this docshell, + // if any. + + nsCOMPtr contentViewer; + GetContentViewer(getter_AddRefs(contentViewer)); + if (!contentViewer) + return NS_ERROR_NO_INTERFACE; + + nsCOMPtr domDoc; + contentViewer->GetDOMDocument(getter_AddRefs(domDoc)); + NS_ASSERTION(domDoc, "Should have a document."); + if (!domDoc) + return NS_ERROR_NO_INTERFACE; + +#if defined(PR_LOGGING) && defined(DEBUG) + PR_LOG(gDocShellLog, PR_LOG_DEBUG, + ("nsDocShell[%p]: returning resource package " + "manager container %p", + this, domDoc.get())); +#endif + return domDoc->QueryInterface(aIID, aSink); + } else if (aIID.Equals(NS_GET_IID(nsIPrompt)) && NS_SUCCEEDED(EnsureScriptEnvironment())) { nsresult rv; nsCOMPtr wwatch = do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr window(do_QueryInterface(mScriptGlobal)); @@ -8338,16 +8365,23 @@ nsDocShell::DoURILoad(nsIURI * aURI, // Any document load should not inherit application cache. appCacheChannel->SetInheritApplicationCache(PR_FALSE); // Loads with the correct permissions should check for a matching // application cache. appCacheChannel->SetChooseApplicationCache(ShouldCheckAppCache(aURI)); } + nsCOMPtr rpChannel = + do_QueryInterface(channel); + if (rpChannel) { + // We shouldn't ever load a document from a resource package. + rpChannel->SetInheritResourcePackageManager(PR_FALSE); + } + // Make sure to give the caller a channel if we managed to create one // This is important for correct error page/session history interaction if (aRequest) NS_ADDREF(*aRequest = channel); channel->SetOriginalURI(aURI); if (aTypeHint && *aTypeHint) { channel->SetContentType(nsDependentCString(aTypeHint)); diff --git a/dom/interfaces/html/nsIDOMHTMLHtmlElement.idl b/dom/interfaces/html/nsIDOMHTMLHtmlElement.idl --- a/dom/interfaces/html/nsIDOMHTMLHtmlElement.idl +++ b/dom/interfaces/html/nsIDOMHTMLHtmlElement.idl @@ -42,13 +42,14 @@ /** * The nsIDOMHTMLHtmlElement interface is the interface to a [X]HTML * html element. * * For more information on this interface please see * http://www.w3.org/TR/DOM-Level-2-HTML/ */ -[scriptable, uuid(a6cf9086-15b3-11d2-932e-00805f8add32)] +[scriptable, uuid(a0e326c2-8536-11df-a1cf-0026b9792740)] interface nsIDOMHTMLHtmlElement : nsIDOMHTMLElement { attribute DOMString version; + attribute DOMString packages; }; diff --git a/layout/reftests/reftest.list b/layout/reftests/reftest.list --- a/layout/reftests/reftest.list +++ b/layout/reftests/reftest.list @@ -227,8 +227,11 @@ include xul-document-load/reftest.list include ../xul/base/src/grid/reftests/reftest.list # z-index/ include z-index/reftest.list # reftest(s) to verify content bugfixes include ../../content/html/document/reftests/reftests.list include ../../content/html/content/reftests/reftest.list + +# tests for resource packages +include ../../netwerk/test/resourcepackage/reftests/reftests.list diff --git a/netwerk/base/public/Makefile.in b/netwerk/base/public/Makefile.in --- a/netwerk/base/public/Makefile.in +++ b/netwerk/base/public/Makefile.in @@ -133,16 +133,20 @@ XPIDLSRCS = \ nsIAuthPromptProvider.idl \ nsPISocketTransportService.idl \ nsIChannelEventSink.idl \ nsINetUtil.idl \ nsIProxiedChannel.idl \ nsIRandomGenerator.idl \ nsIURIWithPrincipal.idl \ nsIURIClassifier.idl \ + nsIResourcePackageManager.idl \ + nsIResourcePackageManagerContainer.idl \ + nsIResourcePackageChannel.idl \ + nsIResourcePackageListener.idl \ $(NULL) EXPORTS = \ netCore.h \ nsNetError.h \ nsNetUtil.h \ nsNetStrings.h \ nsChannelProperties.h \ diff --git a/netwerk/base/public/nsIResourcePackageChannel.idl b/netwerk/base/public/nsIResourcePackageChannel.idl new file mode 100644 --- /dev/null +++ b/netwerk/base/public/nsIResourcePackageChannel.idl @@ -0,0 +1,60 @@ +/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is nsIResourcePackageChannel.idl. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Justin Lebar + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" +#include "nsIResourcePackageManagerContainer.idl" + +interface nsICacheEntryDescriptor; + +/** + * Interface implemented by channels that support resource packages. + */ +[uuid(60df2514-c2eb-4ff0-9c91-fea8ef6bbac2)] +interface nsIResourcePackageChannel : nsIResourcePackageManagerContainer +{ + /** + * When true, the channel will ask its notification callbacks for a + * resource package manager if one is not explicitly provided. Default + * value is true. + * + * NS_ERROR_ALREADY_OPENED will be thrown if set after AsyncOpen() + * is called. + */ + attribute boolean inheritResourcePackageManager; +}; diff --git a/netwerk/base/public/nsIResourcePackageListener.idl b/netwerk/base/public/nsIResourcePackageListener.idl new file mode 100644 --- /dev/null +++ b/netwerk/base/public/nsIResourcePackageListener.idl @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation + * + * Contributor(s): + * Justin Lebar + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" + +interface nsIInputStream; + +/** + * Classes implementing this interface register a request to load a resource + * from an nsIResourcePackageManager by calling LoadAsync. The resource + * package manager then notifies the requester when the resource is available + * from a package or when it's convinced the resource cannot be loaded from a + * package. + */ +[uuid(529bef14-4f60-4118-beab-a89b582962fe)] +interface nsIResourcePackageListener : nsISupports +{ + /** + * Inform the listener that the resource it had asked for is now available. + * + * @arg inputStream a stream from which the requested resource can be read. + */ + void onResourceReadyFromPkg(in nsIInputStream inputStream); + + /** + * Inform the listener that the resource it had asked for cannot be loaded + * from a resource package. + */ + void onResourceFailedFromPkg(); +}; diff --git a/netwerk/base/public/nsIResourcePackageManager.idl b/netwerk/base/public/nsIResourcePackageManager.idl new file mode 100644 --- /dev/null +++ b/netwerk/base/public/nsIResourcePackageManager.idl @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation + * + * Contributor(s): + * Justin Lebar + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" + +interface nsINode; +interface nsIURI; +interface nsIDocument; +interface nsIHttpChannel; + +/** + * Manges the resource packages contained by a document. + * + * In particular, this interface keeps track of the packages listed in the + * element's |packages| attribute, and can provide a channel with an + * input stream to a particular resource in a resource package. + */ +[uuid(24064187-0193-465e-9d18-b04e477b1e45)] +interface nsIResourcePackageManager : nsISupports +{ + /** + * The document with which this resource package is associated. + */ + attribute nsIDocument document; + + /** + * Inform the resource package manager that the element's |packages| + * attribute has been set to the given string. + */ + void setPackagesString(in AString packages); + + /** + * If this function returns successfully, the resource package manager + * promises to eventually call + * nsIResourcePackageListener::OnResourceReadyFromPkg() or + * nsIResourcePackageListener::OnResourceFailedFromPkg() + * on the channel when a resource package containing the requested resource + * has finished downloading or when the resource package manager has decided + * that no resource package will be able to serve the given request. + * + * @throws NS_ERROR_NO_INTERFACE if |channel| does not implement + * nsIResourcePackageListener. + */ + void loadAsync(in nsIHttpChannel channel); +}; diff --git a/netwerk/base/public/nsIResourcePackageManagerContainer.idl b/netwerk/base/public/nsIResourcePackageManagerContainer.idl new file mode 100644 --- /dev/null +++ b/netwerk/base/public/nsIResourcePackageManagerContainer.idl @@ -0,0 +1,51 @@ +/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is nsIResourcePackageContainer.idl. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Justin Lebar + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" + +interface nsIResourcePackageManager; + +/** + * Interface implemented by objects which contain resource packages managers. + */ +[uuid(6148a1aa-a9c1-49f9-80dc-f871db9edbf2)] +interface nsIResourcePackageManagerContainer : nsISupports +{ + attribute nsIResourcePackageManager resourcePackageManager; +}; diff --git a/netwerk/base/src/Makefile.in b/netwerk/base/src/Makefile.in --- a/netwerk/base/src/Makefile.in +++ b/netwerk/base/src/Makefile.in @@ -86,16 +86,17 @@ CPPSRCS = \ nsUnicharStreamLoader.cpp \ nsURIChecker.cpp \ nsURLHelper.cpp \ nsURLParsers.cpp \ nsNetStrings.cpp \ nsBase64Encoder.cpp \ nsSerializationHelper.cpp \ nsDNSPrefetch.cpp \ + nsResourcePackageManager.cpp \ $(NULL) ifeq ($(MOZ_WIDGET_TOOLKIT),os2) CPPSRCS += nsURLHelperOS2.cpp else ifdef MOZ_ENABLE_LIBCONIC CPPSRCS += nsAutodialMaemo.cpp CPPSRCS += nsNativeConnectionHelper.cpp diff --git a/netwerk/base/src/nsResourcePackageManager.cpp b/netwerk/base/src/nsResourcePackageManager.cpp new file mode 100644 --- /dev/null +++ b/netwerk/base/src/nsResourcePackageManager.cpp @@ -0,0 +1,911 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation + * + * Contributor(s): + * Justin Lebar + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "prlog.h" +#include "nsWhitespaceTokenizer.h" +#include "nsCRT.h" +#include "nsNetUtil.h" +#include "nsStreamUtils.h" +#include "nsThreadUtils.h" +#include "nsINode.h" +#include "nsIInterfaceRequestor.h" +#include "nsIDocument.h" +#include "nsIZipReader.h" +#include "nsEscape.h" +#include "nsIResourcePackageChannel.h" +#include "nsIResourcePackageListener.h" +#include "nsResourcePackageManager.h" + +// To log resource package messages to rp.log, set the following environment +// variables: +// export NSPR_LOG_MODULES=nsResourcePackage:5 +// export NSPR_LOG_FILE=rp.log +#if defined(PR_LOGGING) +PRLogModuleInfo *gResourceManagerLog = PR_NewLogModule("nsResourcePackage"); +#define LOG(args) PR_LOG(gResourceManagerLog, 4, args) + +// LOGSPEC is a macro used to make logging an nsIURI's spec easier. Where you +// otherwise would write: +// +// nsCAutoString _spec; +// uri->GetSpec(_spec); +// LOG(("The spec of uri is %s", _spec.get())); +// +// you can write instead +// +// LOGSPEC(("The spec of uri is %s", _spec.get()), uri); +// +#define LOGSPEC(args, uri) \ + PR_BEGIN_MACRO \ + nsCAutoString _spec; \ + uri->GetSpec(_spec); \ + LOG(args); \ + PR_END_MACRO + +#else // ifndef PR_LOGGING +#define LOG(args) +#define LOGSPEC(args, uri) +#endif + +static NS_DEFINE_IID(kZipReaderCID, NS_ZIPREADER_CID); + +NS_INTERFACE_MAP_BEGIN(nsResourcePackageManager) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIResourcePackageManager) + NS_INTERFACE_MAP_ENTRY(nsIResourcePackageManager) +NS_INTERFACE_MAP_END + +NS_IMPL_ADDREF(nsResourcePackageManager) +NS_IMPL_RELEASE(nsResourcePackageManager) + +/* + * When a channel tries to load a resource from a resource package which hasn't + * yet finished downloading, nsResourcePackageManager creates an + * nsResourcePackageRequest stores it in mRequests. Then when a resource + * package finishes downloading, we check our list of requests to see if we can + * serve any of the requests using the resource package. + */ +class nsResourcePackageRequest : public PRCList +{ +public: + nsResourcePackageRequest(nsIResourcePackageListener *aListener, + nsIURI *aURI) + : mListener(aListener), + mURI(aURI) + { + NS_ASSERTION(aListener && aURI, "null args?"); + } + + nsCOMPtr mListener; + nsCOMPtr mURI; +}; + +/* + * nsResourcePackageContainer is a logical container for a single resource + * package. + */ +class nsResourcePackageContainer : public nsIDownloadObserver +{ +public: + nsResourcePackageContainer(nsResourcePackageManager *aManager); + virtual ~nsResourcePackageContainer(); + + NS_DECL_ISUPPORTS + NS_DECL_NSIDOWNLOADOBSERVER + + /** + * Initialize a resource package container. The descriptor should be a + * whitespace-separated list with at least one element. The first element is + * the href of the resource package, and any remaining elements are the set + * of resources the page declares are in the resource package. + */ + nsresult Initialize(const nsACString &aDescriptor); + + /** + * Determines whether it's possible that this resource package may serve a + * resource at the given URI. This method may be called before the resource + * package has been downloaded. + * + * If we've finished downloading the resource package, this method is the + * same as Contains(). + * + * If the string defining this resource package explicitly lists its contents + * (i.e. if mContents is not empty), then we say that the resource package + * may contain only those files explicitly listed. Otherwise, we say that + * the package may contain any file in or below the directory containing the + * package. + */ + PRBool MayContain(nsIURI *aURI); + + /** + * Determines whether the resource package contains a file corresponding to + * the given URI. + * + * If mContents is not empty (i.e. the string defining the resource package + * explicitly lists the package's contents), then the package contains + * the set of files actually in the archive intersected with mContents. + * + * If mContents is empty but the first file in the package is named + * manifest.txt, then the package contains the set of files actually in the + * archive intersected with the contents of the manifest. + * + * Otherwise, the package contains the set of files actually in the archive. + */ + PRBool Contains(nsIURI *aURI); + + /** + * Open an input stream into the resource package for the given URI. + */ + nsresult GetInputStream(nsIURI *aURI, + nsIInputStream **aResult); + + void CancelDownload(); + + PRBool DownloadCompleted() + { + return mDownloadCompleted; + } + + nsIURI* GetPackageURI() + { + return mPackageURI; + } + +private: + // Weak reference. When the manager dies, it kills all of its resource + // package containers by cancelling any outstanding downloads. (A strong + // reference wouldn't do us any good here, because that would just keep the + // manager alive after its document has died, which we definitely want to + // avoid.) + nsResourcePackageManager *mManager; + + nsCOMPtr mPackageURI; + + // If the resource package specified a list of contents along with this + // resource package, they're resolved to URIs and stored here. + nsCOMArray mContentList; + + PRBool mDownloadCompleted; + nsCOMPtr mChannel; + nsCOMPtr mDownloader; + nsCOMPtr mFile; + nsCOMPtr mZipReader; + + /** + * Get the location of the resource specified by |aURI| relative to the + * directory containing this resource package. + * + * @throws NS_ERROR_FAILURE if |aURI| cannot be made relative to |mHrefURI| + * or if |aURI| and |mHrefURI| are equal. + */ + nsresult GetSpecInPackage(nsIURI *aURI, nsACString &aResult); + + /** + * Does mContentList contain an object equal to aURI? + */ + PRBool ContentListContains(nsIURI *aURI); + + /** + * Is the given URI in or beneath the directory of mPackageURI? + */ + PRBool IsAtOrBeneathPackageURI(nsIURI *aURI); +}; + +NS_INTERFACE_MAP_BEGIN(nsResourcePackageContainer) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDownloadObserver) + NS_INTERFACE_MAP_ENTRY(nsIDownloadObserver) +NS_INTERFACE_MAP_END + +NS_IMPL_ADDREF(nsResourcePackageContainer) +NS_IMPL_RELEASE(nsResourcePackageContainer) + +nsResourcePackageContainer::nsResourcePackageContainer( + nsResourcePackageManager *aManager) : + mManager(aManager), + mDownloadCompleted(PR_FALSE) +{ +} + +nsResourcePackageContainer::~nsResourcePackageContainer() +{ +} + +static PRBool +StartsWith(const nsACString &aHaystack, const char *aNeedle) +{ + nsCSubstring::const_char_iterator begin; + aHaystack.BeginReading(begin); + PRUint32 needleLen = strlen(aNeedle); + + if (needleLen > aHaystack.Length()) + return PR_FALSE; + + nsCSubstring::const_char_iterator iter = begin; + const char *needle = aNeedle; + while (iter < begin + needleLen) { + if (*needle != *iter) + return PR_FALSE; + + ++iter; + ++needle; + } + + return PR_TRUE; +} + +static PRBool +EndsWith(const nsACString &aHaystack, const char *aNeedle) +{ + nsCSubstring::const_char_iterator begin, end; + aHaystack.BeginReading(begin); + aHaystack.EndReading(end); + PRUint32 haystackLen = aHaystack.Length(); + PRUint32 needleLen = strlen(aNeedle); + + if (needleLen > haystackLen) + return PR_FALSE; + + nsCSubstring::const_char_iterator iter = begin + (haystackLen - needleLen); + const char *needle = aNeedle; + while (iter < end) { + if (*needle != *iter) + return PR_FALSE; + + ++iter; + ++needle; + } + + return PR_TRUE; +} + +nsresult +nsResourcePackageContainer::Initialize(const nsACString &aDescriptor) +{ + NS_PRECONDITION(!mPackageURI, "Double-initialization?"); + + LOG(("nsResourcePackageContainer::Initialize aDescriptor=%s\n", + PromiseFlatCString(aDescriptor).get())); + + // Tokenize the descriptor. + nsCWhitespaceTokenizer tok(aDescriptor); + + // The descriptor shouldn't just be whitespace. + if (!tok.hasMoreTokens()) + return NS_ERROR_FAILURE; + + // Get the document's base URI. + nsCOMPtr doc = mManager->GetDocument(); + NS_ENSURE_TRUE(doc, NS_ERROR_FAILURE); + nsCOMPtr baseURI = doc->GetBaseURI(); + + // Resolve the first token relative to the document's base URI. This is the + // URI of the package. + nsCAutoString packageSpec; + nsresult rv = baseURI->Resolve(tok.nextToken(), packageSpec); + if (NS_FAILED(rv)) { + NS_WARNING("Couldn't resolve package href relative to base URI."); + return rv; + } + rv = NS_NewURI(getter_AddRefs(mPackageURI), packageSpec, nsnull, baseURI); + NS_ENSURE_SUCCESS(rv, rv); + + // Construct packageBase, the combined host and directory of mPackageURI. + nsCOMPtr packageURL = do_QueryInterface(mPackageURI); + NS_ENSURE_TRUE(packageURL, NS_ERROR_FAILURE); + + nsCAutoString packageDirectory; + rv = packageURL->GetDirectory(packageDirectory); + NS_ENSURE_SUCCESS(rv, rv); + + nsCAutoString packageBase; + rv = packageURL->Resolve(packageDirectory, packageBase); + NS_ENSURE_SUCCESS(rv, rv); + + // The remaining tokens tell us what's in the package. Create a nsIURI + // object for each of them and add the objects to mContentList. + while (tok.hasMoreTokens()) { + // XXX charset? + // Unescape the token, per the spec. + nsCAutoString unescToken(tok.nextToken()); + NS_UnescapeURL(unescToken); + + // Ignore this token if it has a . or .. directory, because the browser + // will never request a URI containing a literal '.' or '..' directory -- + // these are always resolved away when we create a URI. + if (unescToken.Find("/../") != -1 || + unescToken.Find("/./") != -1 || + StartsWith(unescToken, "../") || + StartsWith(unescToken, "./") || + EndsWith(unescToken, "/..") || + EndsWith(unescToken, "/.") || + unescToken.Equals("..") || + unescToken.Equals(".")) { + continue; + } + + // Concatenate packageBase and unescToken to get the URL that the token + // refers to. + nsCAutoString entrySpec(packageBase); + entrySpec.Append(unescToken); + + nsCOMPtr entryURI; + NS_NewURI(getter_AddRefs(entryURI), entrySpec, nsnull, mPackageURI); + if (entryURI) { + mContentList.AppendObject(entryURI); + LOGSPEC(("nsResourcePackageContainer::Initialize " + "Adding to content list: %s\n", + _spec.get()), entryURI); + } + } + + // Done tokenizing. Now we can prepare to download the package. + nsCOMPtr loadGroup; + loadGroup = doc->GetDocumentLoadGroup(); + + rv = NS_NewChannel(getter_AddRefs(mChannel), + mPackageURI, + nsnull, // ioService + loadGroup); + NS_ENSURE_SUCCESS(rv, rv); + + // Don't load a resource package from a resource package. + nsCOMPtr rpChannel = + do_QueryInterface(mChannel); + if (rpChannel) { + rpChannel->SetInheritResourcePackageManager(PR_FALSE); + } + + rv = NS_NewDownloader(getter_AddRefs(mDownloader), this); + NS_ENSURE_SUCCESS(rv, rv); + + LOGSPEC(("nsResourcePackageContainer::Initialize Opening channel for %s.\n", + _spec.get()), mPackageURI); + mChannel->AsyncOpen(mDownloader, nsnull); + + return NS_OK; +} + +PRBool +nsResourcePackageContainer::ContentListContains(nsIURI *aURI) +{ + for (PRInt32 i = 0; i < mContentList.Count(); i++) { + PRBool equal = PR_FALSE; + mContentList[i]->Equals(aURI, &equal); + if (equal) + return PR_TRUE; + } + + return PR_FALSE; +} + +PRBool +nsResourcePackageContainer::IsAtOrBeneathPackageURI(nsIURI *aURI) +{ + // This is a little more complicated than might seem necessary. The + // difficulty arises from the fact that we want to say that a resource + // package located at + // + // http://FOO.com:80/bar/pkg.zip + // + // can load a resource at + // + // http://foo.com/bar/baz.png. + // + // In order to get this behavior, we need to first ask the URL class to + // verify that the two URLs' login, password, host, and port are the same. + // We do this through a call to GetCommonBaseSpec. Once we know that these + // parts of the URIs are equivalent, we can compare the directory portions + // of the URIs with a simple string comparison. + // + // The directory portion of a URL should always end in a '/', so we won't + // make the mistake of accepting directory "foo" as a prefix of directory + // "foobar". + + nsCOMPtr packageURL = do_QueryInterface(mPackageURI); + nsCAutoString commonBaseSpec; + nsresult rv = packageURL->GetCommonBaseSpec(aURI, commonBaseSpec); + if (NS_FAILED(rv)) + return PR_FALSE; + + // commonBaseSpec is non-empty if the two URIs have the same login, password, + // host, and port. + if (!commonBaseSpec.Length()) + return PR_FALSE; + + // Now we can do a character comparison on the directory portions of the + // URIs. + nsCOMPtr resourceURL = do_QueryInterface(aURI); + if (!resourceURL) + return PR_FALSE; + nsCAutoString resourceDirectory; + rv = resourceURL->GetDirectory(resourceDirectory); + if (NS_FAILED(rv)) + return PR_FALSE; + + nsCAutoString packageDirectory; + rv = packageURL->GetDirectory(packageDirectory); + if (NS_FAILED(rv)) + return PR_FALSE; + + NS_ASSERTION(packageDirectory.IsEmpty() == 0 || + packageDirectory[packageDirectory.Length()-1] == '/', + "URL's directory should be empty or end in '/'."); + + // Does resourceDirectory start with packageDirectory? + return resourceDirectory.Find(packageDirectory) == 0; +} + +PRBool +nsResourcePackageContainer::MayContain(nsIURI *aURI) +{ + NS_PRECONDITION(aURI, "aURI is null?"); + + // If the resource package has finished downloading, we can give an + // authoritative answer to the question of whether the package contains this + // aURI. + if (DownloadCompleted()) + return Contains(aURI); + + // A package can't serve a request for a resource in a directory which isn't + // equal to or beneath the directory containing the package. + if (!IsAtOrBeneathPackageURI(aURI)) + return PR_FALSE; + + // If mContentList isn't empty, then this package may contain the resource + // only if the resource is explicitly listed in mContentList. If + // mContentList is empty, we say that the package may contain anything. + // + // Note that mContentList.IsEmpty() isn't the same thing as + // !mContentList.Count(), since the IsEmpty() might be false even after a + // call to Clear(). + if (mContentList.Count()) + return ContentListContains(aURI); + + return PR_TRUE; +} + +PRBool +nsResourcePackageContainer::Contains(nsIURI *aURI) +{ + NS_PRECONDITION(DownloadCompleted(), "Download needs to complete first."); + + // If the download didn't complete successfully (as indicated by our lack of + // a zip reader), say that this container contains nothing. + if (!mZipReader) + return PR_FALSE; + + if (!IsAtOrBeneathPackageURI(aURI)) + return PR_FALSE; + + // If contents were specified for this package, then we take the intersection + // of the specified contents and the actual contents of the resource + // package -- i.e. a file is only in the package if it's both in + // mContentList and actually in the archive. + if (mContentList.Count()) { + PRBool contains = ContentListContains(aURI); + if (!contains) + return PR_FALSE; + } + + nsCAutoString spec; + nsresult rv = GetSpecInPackage(aURI, spec); + NS_ENSURE_SUCCESS(rv, PR_FALSE); + + PRBool result = PR_FALSE; + rv = mZipReader->HasEntry(spec, &result); + return NS_SUCCEEDED(rv) && result; +} + +void +nsResourcePackageContainer::CancelDownload() +{ + if (mChannel) { + mChannel->Cancel(NS_BINDING_ABORTED); + mChannel = nsnull; + } + + mDownloader = nsnull; + mFile = nsnull; + mZipReader = nsnull; +} + +nsresult +nsResourcePackageContainer::GetSpecInPackage(nsIURI *aURI, + nsACString &aResult) +{ + NS_PRECONDITION(IsAtOrBeneathPackageURI(aURI), + "Don't GetSpecInPackage without checking " + "IsAtOrBeneathPackageURI first!"); + + aResult.Truncate(); + + nsCOMPtr packageURL = do_QueryInterface(mPackageURI); + NS_ENSURE_TRUE(packageURL, NS_ERROR_FAILURE); + + // Now get aURI relative to the directory containing the resource package. + nsCAutoString relPath; + nsresult rv = packageURL->GetRelativeSpec(aURI, relPath); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // In general, GetRelativeSpec might add ..'s to make aURI relative to + // packageURI -- we definitely don't want that. But since we always check + // IsAtOrBeneathPackageURI before calling GetSpecInPackage, we shouldn't run + // into trouble. + + // An empty relpath indicates that aURI equals mPackageURI, and relPath equal + // to aURI indicates that aURI cannot be made relative to mPackageURI. In + // both cases, the package cannot contain the requested resource. + nsCAutoString uriSpec; + rv = aURI->GetSpec(uriSpec); + if (NS_FAILED(rv) || relPath.IsEmpty() || uriSpec.Equals(relPath)) { + return NS_ERROR_FAILURE; + } + + // XXX charset? + // Unescape relPath since we're going to be using this string to get an entry + // from the package. We have to do this even though we already unescaped the + // spec when we created the URI in Initialize() since creating a URI might + // add escape characters. + NS_UnescapeURL(relPath); + + aResult.Assign(relPath); + return NS_OK; +} + +NS_IMETHODIMP +nsResourcePackageContainer::OnDownloadComplete(nsIDownloader *aDownloader, + nsIRequest *aRequest, + nsISupports *aContext, + nsresult aStatus, + nsIFile *aFile) +{ + // Indicate that our download has completed, one way or another. + mDownloadCompleted = PR_TRUE; + + // Whatever happens here, we need to be sure to call + // mManager->OnDownloadComplete() or OnDownloadFailed() so the manager has a + // chance to notify http requests which might have been waiting on this + // download to complete. + + if (NS_FAILED(aStatus)) { + mManager->OnDownloadFailed(this); + return NS_OK; + } + + nsresult rv = NS_OK; + do { + mZipReader = do_CreateInstance(kZipReaderCID, &rv); + if (NS_FAILED(rv)) break; + + rv = mZipReader->Open(aFile); + if (NS_FAILED(rv)) break; + + // Check the integrity of the zip file as a whole. + rv = mZipReader->Test(nsnull); + if (NS_FAILED(rv)) break; + + // Remember aFile and aDownloader now that we've opened the zip file + // successfully. + mFile = aFile; + mDownloader = aDownloader; + + // Notify the resource package manager that we've finished our download. + mManager->OnDownloadSucceeded(this); + return NS_OK; + } while (0); + + mManager->OnDownloadFailed(this); + return rv; +} + +nsresult +nsResourcePackageContainer::GetInputStream(nsIURI *aURI, + nsIInputStream **aResult) +{ + NS_ENSURE_ARG_POINTER(aURI); + NS_ENSURE_ARG_POINTER(aResult); + NS_PRECONDITION(DownloadCompleted(), + "Can't open package before it's done downloading."); + NS_PRECONDITION(mZipReader, "Need a zip entry."); + + *aResult = nsnull; + + nsCAutoString pkgSpec; + nsresult rv = GetSpecInPackage(aURI, pkgSpec); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr stream; + rv = mZipReader->GetInputStream(pkgSpec.get(), + getter_AddRefs(stream)); + NS_ENSURE_SUCCESS(rv, rv); + + NS_IF_ADDREF(*aResult = stream); + return NS_OK; +} + +nsResourcePackageManager::nsResourcePackageManager() : + mDoc(nsnull) +{ + PR_INIT_CLIST(&mRequests); +} + +nsResourcePackageManager::~nsResourcePackageManager() +{ + // We need to cancel our containers' outstanding downloads so a container + // doesn't wake up due to a completed download and try to notify us about it + // after we're dead. + for (PRInt32 i = 0; i < mContainers.Count(); i++) { + mContainers[i]->CancelDownload(); + } + + // Delete all our outstanding requests. + PRCList *request = PR_LIST_HEAD(&mRequests); + while (request != &mRequests) { + PRCList *next = PR_NEXT_LINK(request); + delete request; + request = next; + } +} + +NS_IMETHODIMP +nsResourcePackageManager::GetDocument(nsIDocument **aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + NS_IF_ADDREF(*aResult = mDoc); + return NS_OK; +} + +NS_IMETHODIMP +nsResourcePackageManager::SetDocument(nsIDocument *aDoc) +{ + mDoc = aDoc; + return NS_OK; +} + +NS_IMETHODIMP +nsResourcePackageManager::SetPackagesString(const nsAString& aPackages) +{ + LOG(("nsResourcePackageManager::SetPackagesString(aPackages=%s)\n", + NS_ConvertUTF16toUTF8(aPackages).get())); + + nsCStringArray packageList; + nsSubstring::const_char_iterator iter, end; + aPackages.BeginReading(iter); + aPackages.EndReading(end); + + while (iter != end) + { + while (iter != end && nsCRT::IsAsciiSpace(*iter)) + ++iter; + if (iter == end) + break; + + if (*iter == '[') { + ++iter; + if (iter == end) + break; + nsSubstring::const_char_iterator tokBegin = iter; + while (iter != end && *iter != ']') + ++iter; + + packageList.AppendCString(NS_ConvertUTF16toUTF8( + Substring(tokBegin, iter))); + + // Advance past trailing ']' + if (iter != end) + ++iter; + } + else { + nsSubstring::const_char_iterator tokBegin = iter; + while (iter != end && !nsCRT::IsAsciiSpace(*iter) && *iter != '[') + ++iter; + + packageList.AppendCString(NS_ConvertUTF16toUTF8( + Substring(tokBegin, iter))); + } + } + + // Now we have a list of all the packages. Delete the old ones and add the + // new ones. + for (int i = 0; i < mContainers.Count(); i++) { + mContainers[i]->CancelDownload(); + } + mContainers.Clear(); + + for (int i = 0; i < packageList.Count(); i++) { + nsCOMPtr container = + new nsResourcePackageContainer(this); + nsresult rv = container->Initialize(*packageList[i]); + if (NS_SUCCEEDED(rv)) + mContainers.AppendObject(container); + } + + return NS_OK; +} + +NS_IMETHODIMP +nsResourcePackageManager::LoadAsync(nsIHttpChannel *aChannel) +{ + nsCOMPtr uri; + nsresult rv = aChannel->GetOriginalURI(getter_AddRefs(uri)); + NS_ENSURE_SUCCESS(rv, rv); + + // Iterate over our resource packages (starting with the most significant + // container) until we find a package which may contain the requested + // resource. + nsCOMPtr container; + for (PRInt32 i = mContainers.Count() - 1; i >= 0; i--) { + if (mContainers[i]->MayContain(uri)) { + container = mContainers[i]; + break; + } + } + + // If no resource package is found which may contain aChannel's resource, + // return NS_ERROR_FAILURE, indicating to the channel that we can't load it. + if (!container) { + LOGSPEC(("LoadAsync: Cannot serve request for %s (aChannel=%p)", + _spec.get(), aChannel), uri); + return NS_ERROR_FAILURE; + } + + nsCOMPtr listener = do_QueryInterface(aChannel); + NS_ENSURE_TRUE(listener, NS_ERROR_FAILURE); + + LOGSPEC(("LoadAsync: Will try to serve request for %s (aChannel=%p)", + _spec.get(), aChannel), uri); + + // Enqueue a request for this resource. + nsResourcePackageRequest *request = + new nsResourcePackageRequest(listener, uri); + PR_APPEND_LINK(request, &mRequests); + + // If the resource package we found for aChannel has finished downloading, we + // need to schedule a call to CheckOutstandingRequests() so we'll serve the + // request we just enqueued. If the package hasn't finished downloading, + // CheckOutstandingRequests() will be called once it finishes. + + if (container->DownloadCompleted()) { + LOG(("LoadAsync: Scheduling call to CheckOutstandingRequests (aChannel=%p)", + aChannel)); + nsCOMPtr event = + NS_NewRunnableMethod(this,&nsResourcePackageManager::CheckOutstandingRequests); + NS_DispatchToCurrentThread(event); + } + + return NS_OK; +} + +void +nsResourcePackageManager::OnDownloadSucceeded(nsResourcePackageContainer *aContainer) +{ + LOGSPEC(("nsResourcePackageManager::OnDownloadSucceeded " + "(aContainer=%p, href=%s)", + aContainer, _spec.get()), aContainer->GetPackageURI()); + + CheckOutstandingRequests(); +} + +void +nsResourcePackageManager::CheckOutstandingRequests() +{ + // For each waiting request R, + // + // * if the most significant package which may contain R has finished + // downloading, serve R's resource out of that package. + // + // * if no package may contain R, call OnResourceFailedFromPkg to cause + // the resource to be loaded normally. + + nsResourcePackageRequest *request = + static_cast(PR_LIST_HEAD(&mRequests)); + while (request != &mRequests) { + nsResourcePackageRequest *next = + static_cast(PR_NEXT_LINK(request)); + + // Search for the most significant container which may contain our request. + // If the container has finished downloading, try to serve our request out + // of it. + PRBool foundContainer = PR_FALSE; + for (PRInt32 i = mContainers.Count() - 1; i >= 0; i--) { + nsCOMPtr container = mContainers[i]; + + if (container->MayContain(request->mURI)) { + if (!container->DownloadCompleted()) { + // If we found a container which might contain the request but hasn't + // finished downloading yet, we're done here. + foundContainer = PR_TRUE; + break; + } + else { + nsCOMPtr inputStream; + container->GetInputStream(request->mURI, + getter_AddRefs(inputStream)); + if (inputStream) { + // Forward the input stream on to the channel. + LOGSPEC(("Calling OnResourceReadyFromPkg (listener=%p, spec=%s).", + request->mListener.get(), _spec.get()), request->mURI); + + nsCAutoString headers; + request->mListener->OnResourceReadyFromPkg(inputStream); + + // We're done with this request now. + PR_REMOVE_LINK(request); + delete request; + + // Stop looking through the containers. + foundContainer = PR_TRUE; + break; + } + + // If there was an error opening the input stream, we keep looking + // for another container which might contain the request, so we don't + // set foundContainer to true. + } + } + } + + if (!foundContainer) { + // If no container was found which might contain the request, call + // OnResourceFailedFromPkg so we'll load it normally. + LOGSPEC(("Calling OnResourceFailedFromPkg (listener=%p, spec=%s).", + request->mListener.get(), _spec.get()), request->mURI); + request->mListener->OnResourceFailedFromPkg(); + + // Forget about this request. + PR_REMOVE_LINK(request); + delete request; + } + + request = next; + } +} + +void +nsResourcePackageManager::OnDownloadFailed(nsResourcePackageContainer *aContainer) +{ + LOGSPEC(("OnDownloadFailed (aContainer=%p, href=%s)", + aContainer, _spec.get()), aContainer->GetPackageURI()); + mContainers.RemoveObject(aContainer); + CheckOutstandingRequests(); +} + +nsresult NS_NewResourcePackageManager( + nsIResourcePackageManager **aInstancePtrResult) +{ + nsResourcePackageManager *pacMan = new nsResourcePackageManager(); + + return CallQueryInterface(pacMan, aInstancePtrResult); +} diff --git a/netwerk/base/src/nsResourcePackageManager.h b/netwerk/base/src/nsResourcePackageManager.h new file mode 100644 --- /dev/null +++ b/netwerk/base/src/nsResourcePackageManager.h @@ -0,0 +1,91 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation + * + * Contributor(s): + * Justin Lebar + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsResourcePackageManager_h__ +#define nsResourcePackageManager_h__ + +#include "nsIResourcePackageManager.h" +#include "nsCOMArray.h" +#include "prclist.h" + +class nsIURI; +class nsINode; +class nsResourcePackageContainer; + +class nsResourcePackageManager : public nsIResourcePackageManager +{ +public: + nsResourcePackageManager(); + virtual ~nsResourcePackageManager(); + + NS_DECL_ISUPPORTS + NS_DECL_NSIRESOURCEPACKAGEMANAGER + + // Called by a resource package container when its download of the resource + // package completes successfully. + void OnDownloadSucceeded(nsResourcePackageContainer *aContainer); + + // Called by a resource package container when its download of the resource + // package fails. + void OnDownloadFailed(nsResourcePackageContainer *aContainer); + + nsIDocument* GetDocument() + { + return mDoc; + } + +private: + // Checks whether the primary resource package for any of the requests in + // mRequests has finished downloading. If so, serves the request from the + // package. If a request can't be served by any of the resource packages, + // triggers a normal load of the request. + void CheckOutstandingRequests(); + + nsIDocument *mDoc; + + // Containers for each of the resource packages specified in the + // element's |packages| attribute. + nsCOMArray mContainers; + + // List of nsResourcePackageRequest*s which are waiting to hear whether or + // not their requests can be served out of a resource package. + PRCList mRequests; +}; + +nsresult NS_NewResourcePackageManager( + nsIResourcePackageManager **aInstancePtrResult); + +#endif diff --git a/netwerk/build/Makefile.in b/netwerk/build/Makefile.in --- a/netwerk/build/Makefile.in +++ b/netwerk/build/Makefile.in @@ -133,16 +133,18 @@ SHARED_LIBRARY_LIBS += \ LOCAL_INCLUDES += -I$(srcdir)/../wifi ifeq ($(OS_ARCH),SunOS) OS_LIBS += $(GLIB_LIBS) endif endif +# XXX jlebar Should this be hooked into autoconf? Is it correct here? +DEFINES += -DNECKO_RESOURCE_PACKAGES ifdef MOZ_STORAGE DEFINES += -DNECKO_OFFLINE_CACHE endif EXTRA_DSO_LDOPTS = \ $(LIBS_DIR) \ $(EXTRA_DSO_LIBS) \ diff --git a/netwerk/build/nsNetCID.h b/netwerk/build/nsNetCID.h --- a/netwerk/build/nsNetCID.h +++ b/netwerk/build/nsNetCID.h @@ -496,16 +496,32 @@ { /* b00ed78a-04e2-4f74-8e1c-d1af79dfd12f */ \ 0xb00ed78a, \ 0x04e2, \ 0x4f74, \ {0x8e, 0x1c, 0xd1, 0xaf, 0x79, 0xdf, 0xd1, 0x2f} \ } /****************************************************************************** + * netwerk/resource-package classes + */ + +#define NS_RESOURCEPACKAGEMANAGER_CLASSNAME \ + "nsResourcePackageManager" +#define NS_RESOURCEPACKAGEMANAGER_CONTRACTID \ + "@mozilla.org/network/resource-package-manager;1" +#define NS_RESOURCEPACKAGEMANAGER_CID \ +{ /* e0421f19-ced7-4c2d-bd6b-bf2058a2e9a1 */ \ + 0xe0421f19, \ + 0xced7, \ + 0x4c2d, \ + {0xbd, 0x6b, 0xbf, 0x20, 0x58, 0xa2, 0xe9, 0xa1} \ +} + +/****************************************************************************** * netwerk/protocol/http/ classes */ #define NS_HTTPPROTOCOLHANDLER_CID \ { /* 4f47e42e-4d23-4dd3-bfda-eb29255e9ea3 */ \ 0x4f47e42e, \ 0x4d23, \ 0x4dd3, \ diff --git a/netwerk/build/nsNetModule.cpp b/netwerk/build/nsNetModule.cpp --- a/netwerk/build/nsNetModule.cpp +++ b/netwerk/build/nsNetModule.cpp @@ -60,16 +60,17 @@ #include "nsMIMEInputStream.h" #include "nsSOCKSSocketProvider.h" #include "nsCacheService.h" #include "nsDiskCacheDeviceSQL.h" #include "nsMimeTypes.h" #include "nsNetStrings.h" #include "nsDNSPrefetch.h" #include "nsAboutProtocolHandler.h" +#include "nsResourcePackageManager.h" #include "nsNetCID.h" #if defined(XP_MACOSX) #if !defined(__LP64__) #define BUILD_APPLEFILE_DECODER 1 #endif #else @@ -208,16 +209,20 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsNestedA NS_GENERIC_FACTORY_CONSTRUCTOR(nsAboutCacheEntry) #endif #ifdef NECKO_OFFLINE_CACHE NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsOfflineCacheDevice, nsOfflineCacheDevice::GetInstance) NS_GENERIC_FACTORY_CONSTRUCTOR(nsApplicationCacheNamespace) #endif +#ifdef NECKO_RESOURCE_PACKAGES +NS_GENERIC_FACTORY_CONSTRUCTOR(nsResourcePackageManager) +#endif + #ifdef NECKO_PROTOCOL_file // file #include "nsFileProtocolHandler.h" NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsFileProtocolHandler, Init) #endif #ifdef NECKO_PROTOCOL_ftp // ftp @@ -711,16 +716,19 @@ NS_DEFINE_NAMED_CID(NS_VIEWSOURCEHANDLER #endif #if defined(XP_WIN) NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID); #elif defined(MOZ_WIDGET_COCOA) NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID); #elif defined(MOZ_ENABLE_LIBCONIC) NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID); #endif +#ifdef NECKO_RESOURCE_PACKAGES +NS_DEFINE_NAMED_CID(NS_RESOURCEPACKAGEMANAGER_CID); +#endif static const mozilla::Module::CIDEntry kNeckoCIDs[] = { { &kNS_IOSERVICE_CID, false, NULL, nsIOServiceConstructor }, { &kNS_STREAMTRANSPORTSERVICE_CID, false, NULL, nsStreamTransportServiceConstructor }, { &kNS_SOCKETTRANSPORTSERVICE_CID, false, NULL, nsSocketTransportServiceConstructor }, { &kNS_SERVERSOCKET_CID, false, NULL, nsServerSocketConstructor }, { &kNS_SOCKETPROVIDERSERVICE_CID, false, NULL, nsSocketProviderService::Create }, { &kNS_DNSSERVICE_CID, false, NULL, nsDNSServiceConstructor }, @@ -826,16 +834,19 @@ static const mozilla::Module::CIDEntry k #endif #if defined(XP_WIN) { &kNS_NETWORK_LINK_SERVICE_CID, false, NULL, nsNotifyAddrListenerConstructor }, #elif defined(MOZ_WIDGET_COCOA) { &kNS_NETWORK_LINK_SERVICE_CID, false, NULL, nsNetworkLinkServiceConstructor }, #elif defined(MOZ_ENABLE_LIBCONIC) { &kNS_NETWORK_LINK_SERVICE_CID, false, NULL, nsMaemoNetworkLinkServiceConstructor }, #endif +#ifdef NECKO_RESOURCE_PACKAGES + { &kNS_RESOURCEPACKAGEMANAGER_CID, false, NULL, nsResourcePackageManagerConstructor }, +#endif { NULL } }; static const mozilla::Module::ContractIDEntry kNeckoContracts[] = { { NS_IOSERVICE_CONTRACTID, &kNS_IOSERVICE_CID }, { NS_NETUTIL_CONTRACTID, &kNS_IOSERVICE_CID }, { NS_STREAMTRANSPORTSERVICE_CONTRACTID, &kNS_STREAMTRANSPORTSERVICE_CID }, { NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &kNS_SOCKETTRANSPORTSERVICE_CID }, @@ -948,16 +959,19 @@ static const mozilla::Module::ContractID #endif #if defined(XP_WIN) { NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID }, #elif defined(MOZ_WIDGET_COCOA) { NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID }, #elif defined(MOZ_ENABLE_LIBCONIC) { NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID }, #endif +#ifdef NECKO_RESOURCE_PACKAGES + { NS_RESOURCEPACKAGEMANAGER_CONTRACTID, &kNS_RESOURCEPACKAGEMANAGER_CID }, +#endif { NULL } }; static const mozilla::Module kNeckoModule = { mozilla::Module::kVersion, kNeckoCIDs, kNeckoContracts, kNeckoCategories, diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp --- a/netwerk/protocol/http/nsHttpChannel.cpp +++ b/netwerk/protocol/http/nsHttpChannel.cpp @@ -98,16 +98,18 @@ nsHttpChannel::nsHttpChannel() , mResuming(PR_FALSE) , mInitedCacheEntry(PR_FALSE) , mCacheForOfflineUse(PR_FALSE) , mCachingOpportunistically(PR_FALSE) , mFallbackChannel(PR_FALSE) , mInheritApplicationCache(PR_TRUE) , mChooseApplicationCache(PR_FALSE) , mLoadedFromApplicationCache(PR_FALSE) + , mInheritResourcePackageManager(PR_TRUE) + , mTriedResourcePackage(PR_FALSE) , mTracingEnabled(PR_TRUE) , mCustomConditionalRequest(PR_FALSE) , mRemoteChannel(PR_FALSE) { LOG(("Creating nsHttpChannel [this=%p]\n", this)); } nsHttpChannel::~nsHttpChannel() @@ -219,17 +221,37 @@ nsHttpChannel::Connect(PRBool firstTime) if (mCacheEntry) { // inspect the cache entry to determine whether or not we need to go // out to net to validate it. this call sets mCachedContentIsValid // and may set request headers as required for cache validation. rv = CheckCache(); if (NS_FAILED(rv)) NS_WARNING("cache check failed"); - // read straight from the cache if possible... + // If the cache entry isn't valid, we may be able to validate it via a + // resource package. + if (!mCachedContentIsValid && !mTriedResourcePackage) { + // If this succeeds, the resource package manager promises to call + // OnResourceReadyFromPkg() or OnResourceFailedFromPkg() eventually. + rv = TryResourcePackageLoad(); + if (NS_SUCCEEDED(rv)) { +#ifdef DEBUG + nsCAutoString spec; + rv = mURI->GetSpec(spec); + LOG (("Loading resource %s from resource package.\n", + spec.get())); +#endif + // We're loading from a resource package, so we don't want to + // cache the result of this load. + CloseCacheEntry(PR_FALSE); + return rv; + } + } + + // Read straight from the cache, if we can. if (mCachedContentIsValid) { nsRunnableMethod *event = nsnull; if (!mCachedContentIsPartial) { AsyncCall(&nsHttpChannel::AsyncOnExamineCachedResponse, &event); } rv = ReadFromCache(); if (NS_FAILED(rv) && event) { event->Revoke(); @@ -257,16 +279,64 @@ nsHttpChannel::Connect(PRBool firstTime) if (NS_FAILED(rv)) return rv; rv = gHttpHandler->InitiateTransaction(mTransaction, mPriority); if (NS_FAILED(rv)) return rv; return mTransactionPump->AsyncRead(this, nsnull); } +nsresult +nsHttpChannel::TryResourcePackageLoad() +{ + NS_PRECONDITION(!mTriedResourcePackage, + "Don't try to load from a resource package twice."); + NS_PRECONDITION(mCacheEntry, "Must have a cache entry."); + NS_PRECONDITION(!mCachedContentIsValid, + "Cached content shouldn't be valid."); + + // We won't even consider using a resource package if this isn't a GET. + if (mRequestHead.Method() != nsHttp::Get) { + return NS_ERROR_FAILURE; + } + + // Try to get the resource package manager from our notification + // callbacks, if we need to. + if (!mResourcePackageManager && mInheritResourcePackageManager) { + nsCOMPtr pacManContainer; + GetCallback(pacManContainer); + + if (pacManContainer) { + pacManContainer->GetResourcePackageManager( + getter_AddRefs(mResourcePackageManager)); + } + } + + if (!mResourcePackageManager) { + return NS_ERROR_FAILURE; + } + + // Try to load the resource requested by this channel from the resource + // package manager. If the manager doesn't think that it will be able to + // serve this resource, this call will fail. If it succeeds, the manager + // is promising to call OnResourceReadyFromPkg() or + // OnResourceFailedFromPkg() once it's determined whether it actually can + // serve our request. + nsresult rv = mResourcePackageManager->LoadAsync(this); + if (NS_FAILED(rv)) return rv; + + // Indicate that we tried loading from a resource package. If this load + // ultimately fails (indicated by the resource package manager calling + // OnResourceFailedFromPkg()), we'll call Connect() again and bypass the + // resource package manager. + mTriedResourcePackage = PR_TRUE; + + return rv; +} + // called when Connect fails nsresult nsHttpChannel::AsyncAbort(nsresult status) { LOG(("nsHttpChannel::AsyncAbort [this=%p status=%x]\n", this, status)); mStatus = status; mIsPending = PR_FALSE; @@ -2754,16 +2824,28 @@ nsHttpChannel::SetupReplacementChannel(n nsCOMPtr appCacheChannel = do_QueryInterface(newChannel); if (appCacheChannel) { appCacheChannel->SetApplicationCache(mApplicationCache); appCacheChannel->SetInheritApplicationCache(mInheritApplicationCache); // We purposely avoid transfering mChooseApplicationCache. } + // transfer the resource package information + nsCOMPtr resourcePackageChannel = + do_QueryInterface(newChannel); + if (resourcePackageChannel) { + resourcePackageChannel-> + SetResourcePackageManager(mResourcePackageManager); + resourcePackageChannel-> + SetInheritResourcePackageManager(mInheritResourcePackageManager); + // Don't transfer mTriedResourcePackage; let the new channel try for + // itself. + } + // transfer any properties nsCOMPtr bag(do_QueryInterface(newChannel)); if (bag) mPropertyHash.EnumerateRead(CopyProperties, bag.get()); return NS_OK; } @@ -2973,16 +3055,19 @@ NS_INTERFACE_MAP_BEGIN(nsHttpChannel) NS_INTERFACE_MAP_ENTRY(nsITransportEventSink) NS_INTERFACE_MAP_ENTRY(nsISupportsPriority) NS_INTERFACE_MAP_ENTRY(nsIProtocolProxyCallback) NS_INTERFACE_MAP_ENTRY(nsIProxiedChannel) NS_INTERFACE_MAP_ENTRY(nsIHttpAuthenticableChannel) NS_INTERFACE_MAP_ENTRY(nsITraceableChannel) NS_INTERFACE_MAP_ENTRY(nsIApplicationCacheContainer) NS_INTERFACE_MAP_ENTRY(nsIApplicationCacheChannel) + NS_INTERFACE_MAP_ENTRY(nsIResourcePackageManagerContainer) + NS_INTERFACE_MAP_ENTRY(nsIResourcePackageChannel) + NS_INTERFACE_MAP_ENTRY(nsIResourcePackageListener) NS_INTERFACE_MAP_END_INHERITING(HttpBaseChannel) //----------------------------------------------------------------------------- // nsHttpChannel::nsIRequest //----------------------------------------------------------------------------- NS_IMETHODIMP nsHttpChannel::Cancel(nsresult status) @@ -2999,32 +3084,36 @@ nsHttpChannel::Cancel(nsresult status) if (mTransaction) gHttpHandler->CancelTransaction(mTransaction, status); if (mTransactionPump) mTransactionPump->Cancel(status); if (mCachePump) mCachePump->Cancel(status); if (mAuthProvider) mAuthProvider->Cancel(status); + if (mResourcePackagePump) + mResourcePackagePump->Cancel(status); return NS_OK; } NS_IMETHODIMP nsHttpChannel::Suspend() { NS_ENSURE_TRUE(mIsPending, NS_ERROR_NOT_AVAILABLE); LOG(("nsHttpChannel::Suspend [this=%p]\n", this)); ++mSuspendCount; if (mTransactionPump) return mTransactionPump->Suspend(); if (mCachePump) return mCachePump->Suspend(); + if (mResourcePackagePump) + return mResourcePackagePump->Suspend(); return NS_OK; } NS_IMETHODIMP nsHttpChannel::Resume() { NS_ENSURE_TRUE(mSuspendCount > 0, NS_ERROR_UNEXPECTED); @@ -3036,16 +3125,18 @@ nsHttpChannel::Resume() mPendingAsyncCallOnResume = nsnull; NS_ENSURE_SUCCESS(rv, rv); } if (mTransactionPump) return mTransactionPump->Resume(); if (mCachePump) return mCachePump->Resume(); + if (mResourcePackagePump) + return mResourcePackagePump->Resume(); return NS_OK; } //----------------------------------------------------------------------------- // nsHttpChannel::nsIChannel //----------------------------------------------------------------------------- @@ -3362,17 +3453,19 @@ nsHttpChannel::OnStartRequest(nsIRequest // connection failures, etc - bug 93581 request->GetStatus(&mStatus); } LOG(("nsHttpChannel::OnStartRequest [this=%p request=%p status=%x]\n", this, request, mStatus)); // Make sure things are what we expect them to be... - NS_ASSERTION(request == mCachePump || request == mTransactionPump, + NS_ASSERTION(request == mCachePump || + request == mTransactionPump || + request == mResourcePackagePump, "Unexpected request"); NS_ASSERTION(!(mTransactionPump && mCachePump) || mCachedContentIsPartial, "If we have both pumps, the cache content must be partial"); if (!mSecurityInfo && !mCachePump && mTransaction) { // grab the security info from the connection object; the transaction // is guaranteed to own a reference to the connection. mSecurityInfo = mTransaction->SecurityInfo(); @@ -3640,16 +3733,20 @@ NS_IMETHODIMP nsHttpChannel::IsFromCache(PRBool *value) { if (!mIsPending) return NS_ERROR_NOT_AVAILABLE; // return false if reading a partial cache entry; the data isn't entirely // from the cache! + // XXX I think this might end up being wrong with resource packages: If the + // resource package is in cache but the particular resource we're loading + // isn't, we'll report here that we're not loading from cache. + *value = (mCachePump || (mLoadFlags & LOAD_ONLY_IF_MODIFIED)) && mCachedContentIsValid && !mCachedContentIsPartial; return NS_OK; } NS_IMETHODIMP nsHttpChannel::GetCacheTokenExpirationTime(PRUint32 *_retval) @@ -4124,16 +4221,109 @@ nsHttpChannel::SetChooseApplicationCache { NS_ENSURE_TRUE(!mWasOpened, NS_ERROR_ALREADY_OPENED); mChooseApplicationCache = aChoose; return NS_OK; } //----------------------------------------------------------------------------- +// nsHttpChannel::nsIResourcePackageChannel +//----------------------------------------------------------------------------- + +NS_IMETHODIMP +nsHttpChannel::GetInheritResourcePackageManager(PRBool *aInherit) +{ + NS_ENSURE_ARG_POINTER(aInherit); + *aInherit = mInheritResourcePackageManager; + return NS_OK; +} + +NS_IMETHODIMP +nsHttpChannel::SetInheritResourcePackageManager(PRBool aInherit) +{ + mInheritResourcePackageManager = aInherit; + return NS_OK; +} + +NS_IMETHODIMP +nsHttpChannel::GetResourcePackageManager(nsIResourcePackageManager **out) +{ + NS_IF_ADDREF(*out = mResourcePackageManager); + return NS_OK; +} + +NS_IMETHODIMP +nsHttpChannel::SetResourcePackageManager(nsIResourcePackageManager *aPacMan) +{ + NS_ENSURE_TRUE(!mWasOpened, NS_ERROR_ALREADY_OPENED); + + mResourcePackageManager = aPacMan; + return NS_OK; +} + +//----------------------------------------------------------------------------- +// nsHttpChannel::nsIResourcePackageListener +//----------------------------------------------------------------------------- + +NS_IMETHODIMP +nsHttpChannel::OnResourceReadyFromPkg(nsIInputStream *aInputStream) +{ + NS_ASSERTION(mTriedResourcePackage, + "Should have tried resource package first."); + + LOG(("nsHttpChannel::OnResourceReadyFromPkg [this=%p, aInputStream=%p].\n", + this, aInputStream)); + + // We shouldn't be reading from something else. + NS_ASSERTION(!mTransactionPump && !mCachePump, + "Already reading from somewhere?"); + + nsresult rv; + rv = nsInputStreamPump::Create(getter_AddRefs(mResourcePackagePump), + aInputStream, nsInt64(-1), nsInt64(-1), + 0, 0, PR_TRUE); + if (NS_SUCCEEDED(rv)) { + rv = mResourcePackagePump->AsyncRead(this, mListenerContext); + if (NS_SUCCEEDED(rv)) { + NS_ASSERTION(!mResponseHead, "memory leak"); + // Create a response header for this request. We don't want to + // cache the result, so specify that. + mResponseHead = new nsHttpResponseHead(); + mResponseHead->SetHeader(nsHttp::Cache_Control, + NS_LITERAL_CSTRING("no-cache"), + PR_TRUE); + mResponseHead->SetHeader(nsHttp::Cache_Control, + NS_LITERAL_CSTRING("no-store"), + PR_TRUE); + return NS_OK; + } + } + + // If opening the resource pump failed, close the input stream and call + // Connect() to fetch without the resource package manager. + mResourcePackagePump = nsnull; + aInputStream->Close(); + return Connect(PR_FALSE); +} + +NS_IMETHODIMP +nsHttpChannel::OnResourceFailedFromPkg() +{ + NS_ASSERTION(mTriedResourcePackage, + "Should have tried resource package first."); + + LOG(("nsHttpChannel::OnResourceFailedFromPkg [this=%p].\n", this)); + + // If we tried to load from the resource package manager but couldn't, + // Connect() and fetch without the resource package manager. + return Connect(PR_FALSE); +} + +//----------------------------------------------------------------------------- // nsHttpChannel::nsContentEncodings //----------------------------------------------------------------------------- nsHttpChannel::nsContentEncodings::nsContentEncodings(nsIHttpChannel* aChannel, const char* aEncodingHeader) : mEncodingHeader(aEncodingHeader), mChannel(aChannel), mReady(PR_FALSE) { mCurEnd = aEncodingHeader + strlen(aEncodingHeader); diff --git a/netwerk/protocol/http/nsHttpChannel.h b/netwerk/protocol/http/nsHttpChannel.h --- a/netwerk/protocol/http/nsHttpChannel.h +++ b/netwerk/protocol/http/nsHttpChannel.h @@ -50,16 +50,19 @@ #include "nsThreadUtils.h" #include "nsIHttpEventSink.h" #include "nsICachingChannel.h" #include "nsICacheEntryDescriptor.h" #include "nsICacheListener.h" #include "nsIApplicationCache.h" #include "nsIApplicationCacheChannel.h" +#include "nsIResourcePackageManager.h" +#include "nsIResourcePackageChannel.h" +#include "nsIResourcePackageListener.h" #include "nsIEncodedChannel.h" #include "nsIStringEnumerator.h" #include "nsIPrompt.h" #include "nsIResumableChannel.h" #include "nsIProtocolProxyCallback.h" #include "nsICancelable.h" #include "nsIHttpAuthenticableChannel.h" #include "nsITraceableChannel.h" @@ -79,32 +82,37 @@ class nsHttpChannel : public HttpBaseCha , public nsICacheListener , public nsIEncodedChannel , public nsITransportEventSink , public nsIResumableChannel , public nsIProtocolProxyCallback , public nsIHttpAuthenticableChannel , public nsITraceableChannel , public nsIApplicationCacheChannel + , public nsIResourcePackageChannel + , public nsIResourcePackageListener { public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_NSIREQUESTOBSERVER NS_DECL_NSISTREAMLISTENER NS_DECL_NSICACHEINFOCHANNEL NS_DECL_NSICACHINGCHANNEL NS_DECL_NSICACHELISTENER NS_DECL_NSIENCODEDCHANNEL NS_DECL_NSITRANSPORTEVENTSINK NS_DECL_NSIRESUMABLECHANNEL NS_DECL_NSIPROTOCOLPROXYCALLBACK NS_DECL_NSIPROXIEDCHANNEL NS_DECL_NSITRACEABLECHANNEL NS_DECL_NSIAPPLICATIONCACHECONTAINER NS_DECL_NSIAPPLICATIONCACHECHANNEL + NS_DECL_NSIRESOURCEPACKAGEMANAGERCONTAINER + NS_DECL_NSIRESOURCEPACKAGECHANNEL + NS_DECL_NSIRESOURCEPACKAGELISTENER // nsIHttpAuthenticableChannel. We can't use // NS_DECL_NSIHTTPAUTHENTICABLECHANNEL because it duplicates cancel() and // others. NS_IMETHOD GetIsSSL(PRBool *aIsSSL); NS_IMETHOD GetProxyMethodIsConnect(PRBool *aProxyMethodIsConnect); NS_IMETHOD GetServerResponseHeader(nsACString & aServerResponseHeader); NS_IMETHOD GetProxyChallenges(nsACString & aChallenges); @@ -163,16 +171,17 @@ private: // AsyncCall may be used to call a member function asynchronously. // retval isn't refcounted and is set only when event was successfully // posted, the event is returned for the purpose of cancelling when needed nsresult AsyncCall(nsAsyncCallback funcPtr, nsRunnableMethod **retval = nsnull); PRBool RequestIsConditional(); nsresult Connect(PRBool firstTime = PR_TRUE); + nsresult TryResourcePackageLoad(); nsresult AsyncAbort(nsresult status); // Send OnStartRequest/OnStopRequest to our listener, if any. void HandleAsyncNotifyListener(); void DoNotifyListener(); nsresult SetupTransaction(); nsresult ApplyContentConversions(); nsresult CallOnStartRequest(); nsresult ProcessResponse(); @@ -247,16 +256,20 @@ private: PRUint32 mRequestTime; nsCOMPtr mOfflineCacheEntry; nsCacheAccessMode mOfflineCacheAccess; nsCString mOfflineCacheClientID; nsCOMPtr mApplicationCache; + // Resource package specific data + nsCOMPtr mResourcePackageManager; + nsRefPtr mResourcePackagePump; + // auth specific data nsCOMPtr mAuthProvider; // Resumable channel specific data nsCString mEntityID; PRUint64 mStartPos; // Function pointer that can be set to indicate that we got suspended while @@ -290,16 +303,19 @@ private: // opportunistically. PRUint32 mCachingOpportunistically : 1; // True if we are loading a fallback cache entry from the // application cache. PRUint32 mFallbackChannel : 1; PRUint32 mInheritApplicationCache : 1; PRUint32 mChooseApplicationCache : 1; PRUint32 mLoadedFromApplicationCache : 1; + PRUint32 mInheritResourcePackageManager : 1; + // True if we tried to load from a resource package + PRUint32 mTriedResourcePackage : 1; PRUint32 mTracingEnabled : 1; // True if consumer added its own If-None-Match or If-Modified-Since // headers. In such a case we must not override them in the cache code // and also we want to pass possible 304 code response through. PRUint32 mCustomConditionalRequest : 1; // True iff this channel is servicing a remote HttpChannelChild PRUint32 mRemoteChannel : 1; diff --git a/netwerk/test/Makefile.in b/netwerk/test/Makefile.in --- a/netwerk/test/Makefile.in +++ b/netwerk/test/Makefile.in @@ -42,16 +42,17 @@ srcdir = @srcdir@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk MODULE = test_necko DIRS = \ httpserver \ + resourcepackage \ $(NULL) CPPSRCS = \ TestIncrementalDownload.cpp \ TestStreamLoader.cpp \ PropertiesTest.cpp \ urltest.cpp \ diff --git a/netwerk/test/resourcepackage/Makefile.in b/netwerk/test/resourcepackage/Makefile.in new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/Makefile.in @@ -0,0 +1,50 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2010 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +DIRS = \ + mochitests \ + reftests \ + $(NULL) + +include $(topsrcdir)/config/rules.mk diff --git a/netwerk/test/resourcepackage/mochitests/Makefile.in b/netwerk/test/resourcepackage/mochitests/Makefile.in new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/mochitests/Makefile.in @@ -0,0 +1,63 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2010 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Justin Lebar +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ +relativesrcdir = netwerk/test/resourcepackage/mochitests + +include $(DEPTH)/config/autoconf.mk +include $(topsrcdir)/config/rules.mk + +_TEST_FILES = \ + test_load_document.html \ + test_refresh.html \ + test_cache.html \ + test_cache_failure.html \ + file_load_document_popup.html \ + file_load_document_pkg.zip \ + file_refresh_popup.html \ + file_refresh_pkg.zip \ + file_cache_pkg.zip \ + file_cache_img.png \ + file_cache_popup.html \ + $(NULL) + +libs:: $(_TEST_FILES) + $(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir) diff --git a/netwerk/test/resourcepackage/mochitests/file_cache_img.png b/netwerk/test/resourcepackage/mochitests/file_cache_img.png new file mode 100644 index 0000000000000000000000000000000000000000..d72cb1cb5377fde8ec132ad21083fb30e5773ad4 GIT binary patch literal 958 zc%17D@N?(olHy`uVBq!ia0vp^DImQL70(Y)*K0-AbW|YuPgg4Hd%2ljg~^GKA@0fiEBiObAE1a zYF-J0b5UwyNotBhd1gt5g1e`0KzJjcI0FN-q^FBxNX4zUw{5+5)k?H~%y-)|CD=qn z<;H>*XJ@AivtLY9$kKnoE8@Y|xVN`Su5Ft}>04C~=iuakOUi9(v32h~cP`zf`M>;+ z{v(S62jkO=t}VZ!z2fvX*M*vgwlfGYu^^!q21X>L=)kaWKKsr+d#;>2*QchgF52mG z;E&pnZMVrH}-s=H{aCS`uD>>ckbMg zKl|@h?f&1K$;rw0Zr%EH^ytz0y2hV1_a@2oy2WaU#H0`ygw14kj%ZVNqLY+VU{IMzd-NvLM)EP0U zSs}xkzv;lFJ9qEiy_mCk>sC|mPxtQ41KOf{a`x=m3-5jp|KE1w+v(HY?(Xi<+dqCR zy#D&@g?GQN*1b7YP*D*vsid^@YT3O#_y7DTPoHgTZ~yw=zqqeeu}_O4uV24jRaM3H zc3=HpFWb3(-jn?N{coR}{asy6&1zQewq3hcwYRh9=I3W8Cp&N7zC9{Fp8xGW`?ACz zSC=M?rppLa*JwZVxpqS z@4D@J|Bg?v-!H7tAb>zD9LR`~2?;qhFd!iTBDMY9`j2q|?}EO5m)cZdPGazM^>bP0 Hl+XkKt*@j` diff --git a/netwerk/test/resourcepackage/mochitests/file_cache_pkg.zip b/netwerk/test/resourcepackage/mochitests/file_cache_pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..9a0ba32f9cd99136e7f71827653c9c66f961c115 GIT binary patch literal 1614 zc$^FHW@Zs#U|`^2NN>Dr!*sd9wuXs;p$Ulj7-SgIGILVnlM|COQuPY*(nCWy8JH*5 zYWaY0X$3a}Bg;!>1_m(kn&(6D^QV&@B_$+0`1+-Qlj)M1!kL3?Do@{7n=xq~d!$gV z-d6fNC6385$MfDhJ)ZxL1qbgvo!qE2hgELkQ68Q37D|=$mQ!(|BB6C zV`2V&>z@Cz4vHs*u6GDM|8wWgl|4di&lg=eGU!&l5cv#E*?>BsKvnyN>T5cOF z<81V9@7|4tR~It~UgOT5YP5bwr%d1}0kN9RPn-Ano!_$N$n$?PsrFNAK8tPp*2cx+ zdhbny^eTZ9fos2-n66uUX~*-{vpcuFnDSihF6%U57aMuc)nA@*n-=ZRFyJh+*r35_ zQe?C9y~GxyCljBqTp#K_+05!qZ+85&osWLK=8)YeTmJc+|Gx`oEfywCn#j^0Q1v_U z=+EG{xBtD!JuRB{ATM>2?L3VGK}whJy}EK@L((bz>el1(=>{n-ZEJ6?yL>jm@bYuH z;z=yCSLT2EcH94S*?&{d=?TeuK2-W2`R!$Sj91+F+Xnl}nu|-me~-7`{BrsHB9k}O z^?P3ZD?isZ-}L`Bza29QpL{sXyng?@U9-z=azCHxI(Ay$SAut!nCpq%Tt-qpc01kQ z1Q(tu4Qt2_d`!s38gxB|fypQ+&Tfg~cxp%UpOjuh< z?cCSL&uvh2)BpMY{@n7<-=1sMt=@Fjc=Erk@Aohr@6z| z=iL=orFXXC-p}Xmby6Q9&e`w(^mY9ctKC13*|bl$W~;4|@8igN67c-rNsFaVFB-;Q zUfgxy%7F(jUp?P+PIDnALjcY+EQFGV<1=&9QPS~&(R4hTjt5gZW@M6M##I_iFu=f) rMi7Z!HnT#~G+KJbXQmK}nMaryu;vw9=CZPZ^f3Y98X(=n3gQ6(fnfp2 diff --git a/netwerk/test/resourcepackage/mochitests/file_cache_popup.html b/netwerk/test/resourcepackage/mochitests/file_cache_popup.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/mochitests/file_cache_popup.html @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/mochitests/file_load_document_pkg.zip b/netwerk/test/resourcepackage/mochitests/file_load_document_pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..0165d451a27ef2071283355ad806bf9b5d307eb1 GIT binary patch literal 387 zc$^FHW@Zs#U|`^2P+eVbv*rY|&t@R+FA&Qz$S|a3=A_2w=BDPA#24fj zlose^l;q}whHx@4t0`>p2I0~QZU#n{7t9O{V8Yhl+wX`0&)w%D{Wp0$w#YPG65fz* zc}hjE*W;~5p-5r%q?JdG`ER>-{`5NcnBK^F%Q)j%^lL&*PIKLLJ}9Q-$ok!`yy=6( z>g!D!*Cw~?x~+VXyT)99o!k*C{_E#FCuKQtzgfC>5yzZf!60K5!QgjO&bCDu+wMcC4d)cMQGK!JkllNzu zoxZ&x(t2L}f5rfBMkYCCTwx)>00N9ayrdDtA`mjHkdQ$Ol>l#6Hi$8d49P&63uGPx E00!iQ@Bjb+ diff --git a/netwerk/test/resourcepackage/mochitests/file_load_document_popup.html b/netwerk/test/resourcepackage/mochitests/file_load_document_popup.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/mochitests/file_load_document_popup.html @@ -0,0 +1,10 @@ + + + + + + Loaded from the network. + + diff --git a/netwerk/test/resourcepackage/mochitests/file_refresh_pkg.zip b/netwerk/test/resourcepackage/mochitests/file_refresh_pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..934afade97a95c50acd86d23213ad2d6c288ef37 GIT binary patch literal 362 zc$^FHW@Zs#U|`^25Z_jBqxDT>&oUtIBM^%-$S|a3=A_0KrKT077H7m4yVzM?%eN#Z zcr;4b?$v#D?5>J_<$Hh8XY#?Z@tdTc(v)H;zXE@J!pnO?y@&m^V z9pjWGjgvl_eVUX}@9?G7((ppn)s<6CCpP + + + + + Loaded from network. + + diff --git a/netwerk/test/resourcepackage/mochitests/test_cache.html b/netwerk/test/resourcepackage/mochitests/test_cache.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/mochitests/test_cache.html @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/mochitests/test_cache_failure.html b/netwerk/test/resourcepackage/mochitests/test_cache_failure.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/mochitests/test_cache_failure.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/mochitests/test_load_document.html b/netwerk/test/resourcepackage/mochitests/test_load_document.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/mochitests/test_load_document.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/mochitests/test_refresh.html b/netwerk/test/resourcepackage/mochitests/test_refresh.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/mochitests/test_refresh.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/Makefile.in b/netwerk/test/resourcepackage/reftests/Makefile.in new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/Makefile.in @@ -0,0 +1,47 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2010 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ +relativesrcdir = netwerk/test/resourcepackage/reftests + +include $(DEPTH)/config/autoconf.mk +include $(topsrcdir)/config/rules.mk + +# XXX Is there anything to do here? diff --git a/netwerk/test/resourcepackage/reftests/escape/README b/netwerk/test/resourcepackage/reftests/escape/README new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/escape/README @@ -0,0 +1,3 @@ +This directory contains tests which check the handling of escape characters in +the list of files contained in a package. The tests each document what their +resource packages contain. diff --git a/netwerk/test/resourcepackage/reftests/escape/green/0.png b/netwerk/test/resourcepackage/reftests/escape/green/0.png new file mode 100755 index 0000000000000000000000000000000000000000..de9647e44a554d1f4c2f02453d4f241fe6fce634 GIT binary patch literal 3188 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 a-va>Q3Q2=Q-;*E!0000u0%?F>0D~qcb7rt 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 diff --git a/netwerk/test/resourcepackage/reftests/escape/pkg2.zip b/netwerk/test/resourcepackage/reftests/escape/pkg2.zip new file mode 100644 index 0000000000000000000000000000000000000000..a93b8487a3112f20bc6a8776401ddafd2118d9da GIT binary patch literal 6676 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 diff --git a/netwerk/test/resourcepackage/reftests/escape/pkg3/0.png b/netwerk/test/resourcepackage/reftests/escape/pkg3/0.png new file mode 100755 index 0000000000000000000000000000000000000000..de9647e44a554d1f4c2f02453d4f241fe6fce634 GIT binary patch literal 3188 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 diff --git a/netwerk/test/resourcepackage/reftests/escape/pkg4.zip b/netwerk/test/resourcepackage/reftests/escape/pkg4.zip new file mode 100644 index 0000000000000000000000000000000000000000..92012711f769abbce983512f32a0dc210c5f7f08 GIT binary patch literal 3348 zc${^YXEYq#-o?*E@4bhI5M}fpof&0BXGBl*5u!$-%Zxh8Lqwv6kmxOfNG6Eh8A0?G zy#-H{kO(gCd+(RK*8QKg_g?4AS?la|KAfMi9swaaxSB<;b!BRXj2?eV0Ioy?t^)}% zA1{u0%?F>0D~qcb7rt zgRpuC00qO9ARy}{D*)t1_u+73V>fSq?}u*QKHR!+IJb|Vx9j}}E&v2h=a`|8W}D0^ z$Mc6UJuLdUp0_CzDYq#s0nM1g59J}Fy^ZC`pJFm;rPISAp{nQT%R z8Jceg0|4ZuFkRmE;4BbNU4_TXCDl{k6WwYizPRD&xO~1kRPLjG`3C&MhtEaCYuV9C z#Awg+*Ee?w-R@H4JvvTst)WqW5ArsrEe?FHy3xviikq5RU0IpD-2t<4=(7krN44E+ zu{eA1D_r@{@zJ->OMDn9JB$wD$+xzFL;b?*L(j;f9B0>(b^d&yxcI|4dZR6mYSpcBYee6QEsnpZNlCSCdZ+*;lL9O$vZ!9tK*i!ExBiD$+uH zy_IOTmEw=RTojD2qYXw2BX>q$_p=wOh=2*k3|4bO?Zv;UbIP=sxW%OUP>Z#hf23CN zq517Vn%gSah#@1?=pkir;F-ok9OEr{lSo-IqfdBR5rp&!eB8ZQMw1(QDY6Jj(|9De zIf8Rv#qXLztgZH^6r~;@74avgQAhGQrp83&E9HAQu0)@R+G z>?(v3HMyrKPjxYem?ZBmhu++CSoJ5pxU+0sdn?ulN>S!rL9Ug22b*|#Cjaa8v$I5AriH0^W0&9+LrDzi%Lk|CvG{wB+Gt|T8x zC!1^ytIV%AeQOe1!XWb~OJOjQSy!*H^7V^Rb~hHc=ohh#Ca`rQCFCWyGuAU{GQG_$q4m&Erj$PN z7q?&Vzu(1c^A+IIx1}v=O%I;Cs*x;b_@2DL2VG1MB}w*_nkbWq87qMUWJDYLm^@?vHK6~&_}u`-WB zj{FAAfM&1a-HhDNchR}}-o^7lP3ym}hl!sd&pdw@AL&q964z4l5zkQKS(Q6weZ7@A z#k*&In85AY)!~H>FC5Yrqf&6g%5TQB|JJ5Syx(QJ%(v{><=ORypO~MAU(aC6U^mOu z09Pbbq@=H;-#s`m_msY&`bMv4 zYXz%9OLJ?xTJ6f5%A4a2l?}yo#W=%M!}8p5RD1Q0`ri7|4{X(|lf*Ms^`7-%4k$+! z)Q8Th_TAK`)UZ!sf1jz4P{mGBmvdTkhCi(HV^qAOIG=@oxvLh|d6>2-jbRd{mOZM2VnN{^Mjl`j;`Ac=#nM&9vN^iudYV>l`yct*Ee4Mqigg&%meP?^8z` zhi{C3A#qr9NN5kI6o`(Ewun(n^1)iN4@;)Y1`N-_A1-MA)=bl!&qhfaDZCZEEelmG z6LVLdmj5L4Nv%uF)oNhOGRIQ)f!=imF=&;X*MrXse|8RHmvWXUmP1%F#Cz;~g7Wcg zhtb8%rDF6VifQWlSi@V-|Iwg@mM|yY+-C^5nM5Ac#@U9tAwDcOjGctrLb(k05m1BR zXWvsAWrO%Sr3*z?aZv)LPaE~A^yjh_bD6Uqb9+juC^kt(K1+G(3oGL>NUcY0q1Id< z_gA1 z1!n_SIbyy0nlopg*Oiuc;GBnCM_f18=0$UDsME^Q*V3uIsHUdts21+j?Hv8onh{SQ z6r5>@tcT;?G%J5>bSdt|4=Sl43y_D%-$=RLk-7H{6DMB7yBr~nKV`m;&Db;^pQ-kK zo-v1*8;rS*xt!{r)*h=>#g%QIq@8-&RT_Hw?sOB35S)?lQrA!5zK(H@s31*~$A!0b zsJs9Ae4euxAW9`iW&Zcet|eX{&7hUdW3q)~E-J<8$B7{oizK6eJ?2Dlio3(I_OrCJ z&9Y8y9Bn=s4X6%}Z_Nk)(V6*+=B13XRnYANWbggy&4|%d)c#On&WoI|aIs&r_A{^R zL)M+}3+^=Dd!K0i7e}-%64sR(mGHLvAN}`hW>y(2K3ZhGRlMi9<-etTo;qsO-SDy@ zs|si9f!hskdLQC?yvdO(kDohi3i`o(F+P^7pfcBV5bS;2d3?0MJQwaKaE9-1m?F`KK5@q?Y={~kw$-xD_I9SL zt&8h(Z=kf~-NQSlJFNk;0i1hp7HEuCLb;y^Uby{wcVzaZ_%xL*HT8m!AmiYVleFl} z<$sgg31MmgK=4ff(2)TAy12|u03JyIuw@T`Vg>*#-p}rJY6AdyrK_od44nR+x#-!> zO&k5H0U}%-VbMd5C$(x7{>WR$Tfpl~6hbH+p>pla1gbTj&mP!$Yl-#=q9t?|^HGO@ zB7vn^z7cEwl-yLqFM<{9fhxeBe|K(gP0d&&f1rB99)q54bu0)yE9Rs52OUiw6`m|7&;2)>$yg;lWDo9{Qk&x?^mA^r;XdxKBxm8Y+y;*rMAK z>VZg-(F&vT+cae8I{s1SqJ}lTliKt2?{R~lhtuK|Ye}$Nrtsx+ zdQzXo&&e`h10F9YjrH!V3N~JD4l~H^LD8Kf?SMz8LEfU4aUKTrR!Ktfjo#{R@hF35Wmy diff --git a/netwerk/test/resourcepackage/reftests/escape/ref.html b/netwerk/test/resourcepackage/reftests/escape/ref.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/escape/ref.html @@ -0,0 +1,5 @@ + + + + + diff --git a/netwerk/test/resourcepackage/reftests/escape/reftest.list b/netwerk/test/resourcepackage/reftests/escape/reftest.list new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/escape/reftest.list @@ -0,0 +1,4 @@ +HTTP == test1.html ref.html +HTTP == test2.html ref.html +HTTP == test3.html ref.html +HTTP == test4.html ref.html diff --git a/netwerk/test/resourcepackage/reftests/escape/test1.html b/netwerk/test/resourcepackage/reftests/escape/test1.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/escape/test1.html @@ -0,0 +1,10 @@ + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/escape/test2.html b/netwerk/test/resourcepackage/reftests/escape/test2.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/escape/test2.html @@ -0,0 +1,10 @@ + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/escape/test3.html b/netwerk/test/resourcepackage/reftests/escape/test3.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/escape/test3.html @@ -0,0 +1,10 @@ + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/escape/test4.html b/netwerk/test/resourcepackage/reftests/escape/test4.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/escape/test4.html @@ -0,0 +1,12 @@ + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/README b/netwerk/test/resourcepackage/reftests/general/README new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/README @@ -0,0 +1,18 @@ +This folder contains reftests which exercise general features of resource +packages. + +All of the test files in this folder are referenced against ref.html. + +pkg.zip + 0.png - green + 1.png - green + 2.png - green + +pkg-script.zip + script.js + +pkg-style.zip + style.css + +pkg-style-incl.zip + style-incl.css diff --git a/netwerk/test/resourcepackage/reftests/general/green/0.png b/netwerk/test/resourcepackage/reftests/general/green/0.png new file mode 100755 index 0000000000000000000000000000000000000000..de9647e44a554d1f4c2f02453d4f241fe6fce634 GIT binary patch literal 3188 zc$@)r42$!LP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004>Nkln6|eml}?D&a`Z8d|IgNSlAj z6ps>7zoc zrn;qpDDn&pXV0aBnCcPgDaZja2@or1p~68l5ybF39u7jhu`=&%aUM}5kcoH!rDcdQ zWh+9oxpVeT*tDM!dB6E%+$@r*q=L)=DvIW%xqMwq3Buf7UF&wF(&*ECZ-NZ^aP7q@ zjn+-}^x7{A=8i(16@KIX5(seNzK=B2cXs2B)yX4&UR>??DKZzNW{4G}f>e+SQbA5? a-va>Q3Q2=Q-;*E!0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002dNklk07*qoM6N<$g7$@iIRF3v diff --git a/netwerk/test/resourcepackage/reftests/general/green/2.png b/netwerk/test/resourcepackage/reftests/general/green/2.png new file mode 100755 index 0000000000000000000000000000000000000000..0eb97aa1acb3e99904d3cf645e1e72084aa401db GIT binary patch literal 3188 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 diff --git a/netwerk/test/resourcepackage/reftests/general/green/4.png b/netwerk/test/resourcepackage/reftests/general/green/4.png new file mode 100755 index 0000000000000000000000000000000000000000..2c939b305a4f043fe271ad72750546a9b17d0e30 GIT binary patch literal 3022 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 Q^#A|>07*qoM6N<$f>ZsG-T(jq diff --git a/netwerk/test/resourcepackage/reftests/general/pkg-script.zip b/netwerk/test/resourcepackage/reftests/general/pkg-script.zip new file mode 100644 index 0000000000000000000000000000000000000000..c12929f2758aa1104e3c697a481b9f4234619c6e GIT binary patch literal 376 zc$^FHW@Zs#U|`^2i0EjyIs1jB{{oOVpNWBilR<`|IJqdZphPdLI5dQlfmuU#uQv#n zR&X;gvbK1waI&*KWg>nQ>|H=3uv%o37OLC4W-*OXC z5vg?g_*re!iK+kB=@g{CJN0vud4M+~lN>XyK#^bo0Y)HR(g^fCYdS8arf diff --git a/netwerk/test/resourcepackage/reftests/general/pkg-style-import.zip b/netwerk/test/resourcepackage/reftests/general/pkg-style-import.zip new file mode 100644 index 0000000000000000000000000000000000000000..096274f08c85e9790ec5d61fcaecdb1873bec84a GIT binary patch literal 233 zc$^FHW@Zs#U|`^2n6jnareIcbm@$y&0K@_eG7QBfl{u-pnYjh|MJ0O4#l@i^oD9tA z*?Ya&bM|_dR&X;gvbiX1hFt3!wPW>nnMD-S=k^u M85zQWbS>B%0Lj}sLjV8( diff --git a/netwerk/test/resourcepackage/reftests/general/pkg-style.zip b/netwerk/test/resourcepackage/reftests/general/pkg-style.zip new file mode 100644 index 0000000000000000000000000000000000000000..d0720b7167b736cfc9bd555798b24b14036ad961 GIT binary patch literal 421 zc$^FHW@Zs#U|`^2h+5fh6Rq*`(O)1>o{52hlR<`|xTG>CRWG@?I5dQlf!RBJuXhv> zmsW5yFtWU0W?%plt^K}vhZO``zuO)4h+VQ(=>O5X7OUqiWM9!C$!x@yeZXtgigNt` zSI@<#?)J=hcy`bGsg`>dmp@QFH1X?Vh20YG4)85d3v8{F;E)6&&OAK(T7o#2mf8hI<(BJQ=N6uMzM|0BxZos%Usv_br9Tz72u+>v@7jHivb|TQ zSt&gE*sN`y{q1I>QIzBz*{yGnJAa#cNBM=>wJPp2AAV#BHE-)tZf|@ug-K|a!%gKg z2h}HtO?<2QbkCnMe@Ckb5BvO8NoGl(C*4`JBTo1_|D!bDJ9j$ki{7kfyk*ZU@kQPH zv1s-FvKWCyn&0_t-u~Bqd-s%ifHxzP95b#Elwbe>Mj&3&2x1|HCo3d8(ZVvoo0Scs Og^|G@NIQV^G5`Qm9HF!T diff --git a/netwerk/test/resourcepackage/reftests/general/pkg.zip b/netwerk/test/resourcepackage/reftests/general/pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..dc816d08255fab7a1440cddebce02a7345706320 GIT binary patch literal 9794 zc%1E;XHZnjwt#yW@{lDX2n;z&5G2D4IY$|S2oeTGB#4p(W81Meka@cK=yjyMKM(UTv%gB_s!Dnc5sx+=ZYhB^{fJ=j<&k# zX_h<-QsUE@Lj_lPn#er0t?mH;yKoi|koKGz0CJ;SNTji`tA~%rJy#D;P8}qY)6?6- z<<=c%0Q|-?%+Tg$tBgwf(>n+~941N6!<2!P(-iR-L!ZDW#6?D&nJKV`DKf3??EJ(d1u97Pwx-hP}i^e>j{CeCamYw7=AM{Q9%#}m+yRy%RsJAy;NL9n8tFgKp$Er9q9!$<+%ART}C zV&n<+8Y0yef_VhN`y^b|BgN1I)qq$;K2X(!U@}tp%s@6FuROP5pJd7l7;phSRUzKJx3QD(~-?iLIr&A-eXC_=NlB&H3ZS zff7$u0A_uH2aiR>t64D$#2EME7rYyUu6D5O`}>bws;E_8gY4CD%WcoIv(d-M@BUtg*{_fYeb39nd>sT$qgRiZkUL>6dfN+@h9U$a`YPCk?8QH+ zvP>Zp`Fsed|3c@B^+EZ9=-o zJe=J)dJ}HFge%$-rqSk{7TWAvO5Ox=k+zx*2?||6GW1tOla@phw#r256UA#}eW5Jt zBh44Ek4`=kX>p9%=^wpoSe0UAa+W`qxKfYDDI+^C<5!qTq}uOX7VBt3R9+P!OLXk1 z0qt6Rtjy5+I1YL^d+RjYT(Ia2z?Qp4jgLQD1DUS7wtmMi#*b_<7BdA&_^b% z{M?C!dNq6vv_IOJZ%Rr;qO?WeqjYf>#AyO?$aYyCx+tV1e|08Gfo*|n%Z5DTrm9!&f!UmZ>4)38EQ>UY z(u>5-DUxayFVjq?3Ukb9uf$m+%5rK=UztP}UXZ?@Cf66nsH2xx_TuRpg~G^UbfJg2N^Y>#Q53ONn|_-SGS?)#^2U5q2Pe#trP@z~%Z;)m z;y(6DJ6~nr*uw`xjVVX$jgOUzi*n?UQo2%>)u!7?E-EDRDP9N9eGJK#1qzb4gQKVE zHwEVe+480J>m{6R-HM+jKSPyhmzb1jeQTB}UoXhWZ`NqEI>b_`b?Wll@@t{v`iU}@ z&Bn~83djo>4V2_}%f*V_^4M}3)qUUHE!arOd~1iv)b}Wu_HSPPc`-=*$o$CtXTh!( z1&X+uf`@p5qMupu{S_|{MRxJdiSH)J>usvYJcp+a$+M3V>IW5Hj%fa-NgZ>m!*-r$ z-o3-U<0T(49~YmV!J5HFnyEp3zF@wBzJh*dUvJ-wzR}bx=}HoxC708e(?6%rys@|T zvlgi>tgUm_samkkx7w&}x*KjSXO)Mtu)bccS(Z`8JK9**SU_7)Z<_8Z|&O@I`9A_Ck+f`>hPK^kFSD6T1Fh*f#EQlwN3$ShBKMI$Ot7 zSM!3d&#u??*?^(ljP&aC*7d@PR~s@Lw>BatvwEeo1T(Fq?tN_QLVh(_98`g2J-zHU zQyOf9G{T}^FT=$h#S<*cK3BZS^DW+Y*kn@PQ})i9SDsgtotB)oy3s3(f7A7*$EeLC z^G5g#G6a6&bP{kf2nsN~5HvIjtA@29I6Me=$n`E(MSjA0uWD>vEhf8OjX^Cgv@CS7 zrHsq9>-YFFuKned{)GNpRN=EBBWd_c3W{=wn4f z$u~=cJxPf7LKJfuB-WzW&`T~4dP<$ctB&8_ef&n8<0(nETXlRXk(DTUEh2x#+*;tX z5J?r<+0x}*U(^S=XC;}!ee1o|A12~upKoTJtkbp9%|5Bki_o(aWk)SFm)@4EQuOkl zAfIO-5{|e=T&h?XT`S~1VpOtjnOq*+%okwbhP7+?5Zdw@;`R+@LB1Fs^lkF<`gJ3e zxYf*Sho2D{Y|0E#(dG0LOvwx(Uj!!o7TF>_KD?*2Xn74uy49rK^&G8;ov zuN^)g+#TFt3vAkx{(WS^rfL63x%=&e1;oN&#AU?!Q0K6EU!^>%c=h1fq5JhRLwB$B zPUsNyhy+em`?>zp2>XzdxoO;}@HZ{0&P#8PGd6uiDP<@vetX_A2lrI>Us&BIo7v}} zlplW(6IeP+GJNR)JDOemHX>~+O*7pr?a=0?O@mRd^5E#&bigmIiA&Var4_CGb+^sC zZ;h{p4kx0w24XUvW&{O`{g||$cu^a;?ASkZo7!WufyQTcNaN)3vO<$WzwK6?&sNpM z;swh(%d}VWH{92J))bEuhmATLpEstJ*W0?)Zv-^I4s_XHWy_T9pW12m|IT^V{;=u44>>~w zPF#Of?wWlpI80)Vl0x= zTd`t~#f-Py%zb!Nz(f59CY=0{U->0oObi(q*bV0CB7m)@qBa#@@7iwuc;`LOP9RBo zVMt*vct-^9N!Z2xJB+=excZ~Yps-ixCKKlV@F>(+;m{4V<-6aXcToyf7`iPqtKH9P zT}q~%9@5QVok(-d-ATG8^Lw?eNeuszqkb~+5S`knE$2|AIS-ERXPQ)~b`bS8PLsCd zyLR;IOGHV2LmpOOi-H0@kQbJ+M!P211(6`55k}{!jWFZx3>ZR)!yX zgi`$UTz@b4+o-|b&bT;iDHf5*5IlcON9sBIHctAJ?}Pc+k#2a1o$dO8pd?eS3yvW- z)cou?4R6mt!7RB>7;+|&^Gr~5Gz`_t5%!_Re^ZvypCCOS2EbXIDT~CpvYac+xw4!q z%ek_gE6cgEoGZ(@vYac+f043)!M~JcyqPvsm0n{u3<(9saG6NTxjNzn_7T%=A!h3 zHY9Ovy1p>*ul|f(L5ciW$TDSc=kfpb01v%N&ADe2Su==-_#OL&5ZV=~Mr=eX`~iuk z-zTm7!&?r&6VGj3S1#rDTVzt@!Egi8QMn;J)Sz9$4tKiSBT`y!^}k*u-6TVpY5rV( zJw^7D6DY8YV_mUtstfziklz>b{Pw^0B_z)w{~YqqA^#lm&msRD^3Ngv9P-a0{~YrF ziy;4h`x5JCeTj$}_3L=yI(P-*nx~dMkvxHL4ZIHi1v7>XU1;WUv5D$OA{m;MYbxjF-G6Z#XTl4-iz<5Kj$V3FYSK;b_4cADFIW8z+ zWkdOpfw;Wz_o)}!@rcq#b;%Kcuik+vHEB=3w=RIzip7l8iBvy7easGBk(#T?Kfq(& zN<3?0U`F0fbIdq2Y?(#ut-r-Ez@6cN65=8v$tFkDjBrG-C6y`0G_Ry;;}YQ7UJ zhH?Z2@Wva*T=86nyM^%M=iFdXBjfS!W^^MCvJ4Y`IdXCcv$c=0c*WkSVAj5bB2ueR zV1PuiYx<%fFZUdz0f|OI4p1m-zpb`nyW~YpImeh2;NT Tis($A0QB^kJ + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/reftest.list b/netwerk/test/resourcepackage/reftests/general/reftest.list new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/reftest.list @@ -0,0 +1,8 @@ +HTTP == test1.html ref.html +HTTP == test2.html ref.html +HTTP == test3.html ref.html +HTTP == test4.html ref.html +HTTP == test5.html ref.html +HTTP == test_js.html ref.html +HTTP == test_css.html ref.html +HTTP == test_css2.html ref.html diff --git a/netwerk/test/resourcepackage/reftests/general/test1.html b/netwerk/test/resourcepackage/reftests/general/test1.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test1.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/test2.html b/netwerk/test/resourcepackage/reftests/general/test2.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test2.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/test3.html b/netwerk/test/resourcepackage/reftests/general/test3.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test3.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/test4.html b/netwerk/test/resourcepackage/reftests/general/test4.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test4.html @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/test5.html b/netwerk/test/resourcepackage/reftests/general/test5.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test5.html @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/test_css.html b/netwerk/test/resourcepackage/reftests/general/test_css.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test_css.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/test_css2.html b/netwerk/test/resourcepackage/reftests/general/test_css2.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test_css2.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/general/test_js.html b/netwerk/test/resourcepackage/reftests/general/test_js.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/general/test_js.html @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/load/0.png b/netwerk/test/resourcepackage/reftests/load/0.png new file mode 100755 index 0000000000000000000000000000000000000000..88f4cf901239978219798093d956c6705d81ebb9 GIT binary patch literal 3190 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 diff --git a/netwerk/test/resourcepackage/reftests/load/README b/netwerk/test/resourcepackage/reftests/load/README new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/README @@ -0,0 +1,13 @@ +Tests peculiarities of resource packages pertaining to how they're loaded. + +Outside the resource package, + 0.png is red + 1.png is green + +Within the resource package, + 0.png is green + 1.png is red + +The resource package is ordered with 1.png first, and 0.png following. + +subdir/pkg.zip is identical to pkg.zip. diff --git a/netwerk/test/resourcepackage/reftests/load/green/0.png b/netwerk/test/resourcepackage/reftests/load/green/0.png new file mode 100755 index 0000000000000000000000000000000000000000..de9647e44a554d1f4c2f02453d4f241fe6fce634 GIT binary patch literal 3188 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 diff --git a/netwerk/test/resourcepackage/reftests/load/pkg.zip b/netwerk/test/resourcepackage/reftests/load/pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..9c984e455a1bd307db2531434ef16f5573687054 GIT binary patch literal 6468 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 diff --git a/netwerk/test/resourcepackage/reftests/load/ref.html b/netwerk/test/resourcepackage/reftests/load/ref.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/ref.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/load/reftest.list b/netwerk/test/resourcepackage/reftests/load/reftest.list new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/reftest.list @@ -0,0 +1,6 @@ +HTTP == test1.html ref.html +HTTP == test2.html ref.html +HTTP == test3.html ref.html +HTTP == test_base.html ref.html +HTTP == test_subdir.html ref.html + diff --git a/netwerk/test/resourcepackage/reftests/load/subdir/pkg.zip b/netwerk/test/resourcepackage/reftests/load/subdir/pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..9c984e455a1bd307db2531434ef16f5573687054 GIT binary patch literal 6468 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 diff --git a/netwerk/test/resourcepackage/reftests/load/test1.html b/netwerk/test/resourcepackage/reftests/load/test1.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/test1.html @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/load/test2.html b/netwerk/test/resourcepackage/reftests/load/test2.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/test2.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/load/test3.html b/netwerk/test/resourcepackage/reftests/load/test3.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/test3.html @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/load/test_base.html b/netwerk/test/resourcepackage/reftests/load/test_base.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/test_base.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/load/test_subdir.html b/netwerk/test/resourcepackage/reftests/load/test_subdir.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/load/test_subdir.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/README b/netwerk/test/resourcepackage/reftests/multiple_packages/README new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/README @@ -0,0 +1,25 @@ +This folder contains tests to exercise the handling of multiple resource +packages at once and also some tests of percent-encoding in the packages +attribute. + +pkg1.zip + 0.png - red + 1.png - red + 2.png - green + +pkg2.zip + 0.png - green + 1.png - red + +pkg3.zip + 1.png - green + +pkg space.zip + 0 .png - red + 1 .png - red + 2 .png - green + +So to get an all-green result, we could include + pkg1.zip <-- lowest priority + pkg2.zip + pkg3.zip <-- highest priority diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/green/0.png b/netwerk/test/resourcepackage/reftests/multiple_packages/green/0.png new file mode 100755 index 0000000000000000000000000000000000000000..de9647e44a554d1f4c2f02453d4f241fe6fce634 GIT binary patch literal 3188 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 diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/green/2.png b/netwerk/test/resourcepackage/reftests/multiple_packages/green/2.png new file mode 100755 index 0000000000000000000000000000000000000000..0eb97aa1acb3e99904d3cf645e1e72084aa401db GIT binary patch literal 3188 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 Zof?qDf2l=yYES@r@+_X@%iO1{zX6Gur(OU6 diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/pkg1.zip b/netwerk/test/resourcepackage/reftests/multiple_packages/pkg1.zip new file mode 100644 index 0000000000000000000000000000000000000000..b398b40688aa8a83300faed079e7938ce5a016c2 GIT binary patch literal 9796 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 diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/ref.html b/netwerk/test/resourcepackage/reftests/multiple_packages/ref.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/ref.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/reftest.list b/netwerk/test/resourcepackage/reftests/multiple_packages/reftest.list new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/reftest.list @@ -0,0 +1,10 @@ +HTTP == test1.html ref.html +HTTP == test2.html ref.html +HTTP == test3.html ref.html +HTTP == test_attr1.html ref.html +HTTP == test_attr2.html ref.html +HTTP == test_attr3.html ref.html +HTTP == test_attr4.html ref.html +HTTP == test_encoding1.html ref.html +HTTP == test_encoding2.html ref.html +HTTP == test_encoding3.html ref.html diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test1.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test1.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test1.html @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test2.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test2.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test2.html @@ -0,0 +1,42 @@ + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test3.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test3.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test3.html @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr1.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr1.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr1.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr2.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr2.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr2.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr3.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr3.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr3.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr4.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr4.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test_attr4.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding1.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding1.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding1.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding2.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding2.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding2.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding3.html b/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding3.html new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/multiple_packages/test_encoding3.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + diff --git a/netwerk/test/resourcepackage/reftests/reftest.list b/netwerk/test/resourcepackage/reftests/reftest.list new file mode 100644 --- /dev/null +++ b/netwerk/test/resourcepackage/reftests/reftest.list @@ -0,0 +1,7 @@ +# All of these need to be HTTP tests because resource packages don't work over +# file:// URLs. + +include general/reftest.list +include load/reftest.list +include multiple_packages/reftest.list +include escape/reftest.list diff --git a/parser/html/javasrc/AttributeName.java b/parser/html/javasrc/AttributeName.java --- a/parser/html/javasrc/AttributeName.java +++ b/parser/html/javasrc/AttributeName.java @@ -1580,16 +1580,19 @@ public final class AttributeName SAME_LOCAL("language"), ALL_NO_PREFIX, ALL_NCNAME, false); public static final AttributeName TEMPLATE = new AttributeName(ALL_NO_NS, SAME_LOCAL("template"), ALL_NO_PREFIX, ALL_NCNAME, false); public static final AttributeName TABINDEX = new AttributeName(ALL_NO_NS, SAME_LOCAL("tabindex"), ALL_NO_PREFIX, ALL_NCNAME, false); + public static final AttributeName PACKAGES = new AttributeName(ALL_NO_NS, + SAME_LOCAL("packages"), ALL_NO_PREFIX, ALL_NCNAME, false); + public static final AttributeName READONLY = new AttributeName(ALL_NO_NS, SAME_LOCAL("readonly"), ALL_NO_PREFIX, ALL_NCNAME, false); public static final AttributeName SELECTED = new AttributeName(ALL_NO_NS, SAME_LOCAL("selected"), ALL_NO_PREFIX, ALL_NCNAME, false); public static final AttributeName ROWLINES = new AttributeName(ALL_NO_NS, SAME_LOCAL("rowlines"), ALL_NO_PREFIX, ALL_NCNAME, false); @@ -2792,73 +2795,73 @@ public final class AttributeName TARGETY, VIEWBOX, VERSION, PATTERN, PROFILE, SPACING, RESTART, ROWSPAN, SANDBOX, SUMMARY, STANDBY, REPLACE, AUTOPLAY, ADDITIVE, CALCMODE, CODETYPE, CODEBASE, CONTROLS, BEVELLED, BASELINE, EXPONENT, EDGEMODE, ENCODING, GLYPHREF, DATETIME, DISABLED, FONTSIZE, KEYTIMES, PANOSE_1, HREFLANG, ONRESIZE, ONCHANGE, ONBOUNCE, ONUNLOAD, ONFINISH, ONSCROLL, OPERATOR, OVERFLOW, ONSUBMIT, ONREPEAT, ONSELECT, NOTATION, NORESIZE, MANIFEST, MATHSIZE, MULTIPLE, LONGDESC, LANGUAGE, TEMPLATE, TABINDEX, - READONLY, SELECTED, ROWLINES, SEAMLESS, ROWALIGN, STRETCHY, - REQUIRED, XML_BASE, XML_LANG, X_HEIGHT, ARIA_OWNS, AUTOFOCUS, - ARIA_SORT, ACCESSKEY, ARIA_BUSY, ARIA_GRAB, AMPLITUDE, ARIA_LIVE, - CLIP_RULE, CLIP_PATH, EQUALROWS, ELEVATION, DIRECTION, DRAGGABLE, - FILTERRES, FILL_RULE, FONTSTYLE, FONT_SIZE, KEYPOINTS, HIDEFOCUS, - ONMESSAGE, INTERCEPT, ONDRAGEND, ONMOVEEND, ONINVALID, ONKEYDOWN, - ONFOCUSIN, ONMOUSEUP, INPUTMODE, ONROWEXIT, MATHCOLOR, MASKUNITS, - MAXLENGTH, LINEBREAK, LOOPSTART, TRANSFORM, V_HANGING, VALUETYPE, - POINTSATZ, POINTSATX, POINTSATY, PLAYCOUNT, SYMMETRIC, SCROLLING, - REPEATDUR, SELECTION, SEPARATOR, XML_SPACE, AUTOSUBMIT, ALPHABETIC, - ACTIONTYPE, ACCUMULATE, ARIA_LEVEL, COLUMNSPAN, CAP_HEIGHT, - BACKGROUND, GLYPH_NAME, GROUPALIGN, FONTFAMILY, FONTWEIGHT, - FONT_STYLE, KEYSPLINES, HTTP_EQUIV, ONACTIVATE, OCCURRENCE, - IRRELEVANT, ONDBLCLICK, ONDRAGDROP, ONKEYPRESS, ONROWENTER, - ONDRAGOVER, ONFOCUSOUT, ONMOUSEOUT, NUMOCTAVES, MARKER_MID, - MARKER_END, TEXTLENGTH, VISIBILITY, VIEWTARGET, VERT_ADV_Y, - PATHLENGTH, REPEAT_MAX, RADIOGROUP, STOP_COLOR, SEPARATORS, - REPEAT_MIN, ROWSPACING, ZOOMANDPAN, XLINK_TYPE, XLINK_ROLE, - XLINK_HREF, XLINK_SHOW, ACCENTUNDER, ARIA_SECRET, ARIA_ATOMIC, - ARIA_HIDDEN, ARIA_FLOWTO, ARABIC_FORM, CELLPADDING, CELLSPACING, - COLUMNWIDTH, COLUMNALIGN, COLUMNLINES, CONTEXTMENU, BASEPROFILE, - FONT_FAMILY, FRAMEBORDER, FILTERUNITS, FLOOD_COLOR, FONT_WEIGHT, - HORIZ_ADV_X, ONDRAGLEAVE, ONMOUSEMOVE, ORIENTATION, ONMOUSEDOWN, - ONMOUSEOVER, ONDRAGENTER, IDEOGRAPHIC, ONBEFORECUT, ONFORMINPUT, - ONDRAGSTART, ONMOVESTART, MARKERUNITS, MATHVARIANT, MARGINWIDTH, - MARKERWIDTH, TEXT_ANCHOR, TABLEVALUES, SCRIPTLEVEL, REPEATCOUNT, - STITCHTILES, STARTOFFSET, SCROLLDELAY, XMLNS_XLINK, XLINK_TITLE, - ARIA_INVALID, ARIA_PRESSED, ARIA_CHECKED, AUTOCOMPLETE, - ARIA_SETSIZE, ARIA_CHANNEL, EQUALCOLUMNS, DISPLAYSTYLE, - DATAFORMATAS, FILL_OPACITY, FONT_VARIANT, FONT_STRETCH, - FRAMESPACING, KERNELMATRIX, ONDEACTIVATE, ONROWSDELETE, - ONMOUSELEAVE, ONFORMCHANGE, ONCELLCHANGE, ONMOUSEWHEEL, - ONMOUSEENTER, ONAFTERPRINT, ONBEFORECOPY, MARGINHEIGHT, - MARKERHEIGHT, MARKER_START, MATHEMATICAL, LENGTHADJUST, - UNSELECTABLE, UNICODE_BIDI, UNITS_PER_EM, WORD_SPACING, - WRITING_MODE, V_ALPHABETIC, PATTERNUNITS, SPREADMETHOD, - SURFACESCALE, STROKE_WIDTH, REPEAT_START, STDDEVIATION, - STOP_OPACITY, ARIA_CONTROLS, ARIA_HASPOPUP, ACCENT_HEIGHT, - ARIA_VALUENOW, ARIA_RELEVANT, ARIA_POSINSET, ARIA_VALUEMAX, - ARIA_READONLY, ARIA_SELECTED, ARIA_REQUIRED, ARIA_EXPANDED, - ARIA_DISABLED, ATTRIBUTETYPE, ATTRIBUTENAME, ARIA_DATATYPE, - ARIA_VALUEMIN, BASEFREQUENCY, COLUMNSPACING, COLOR_PROFILE, - CLIPPATHUNITS, DEFINITIONURL, GRADIENTUNITS, FLOOD_OPACITY, - ONAFTERUPDATE, ONERRORUPDATE, ONBEFOREPASTE, ONLOSECAPTURE, - ONCONTEXTMENU, ONSELECTSTART, ONBEFOREPRINT, MOVABLELIMITS, - LINETHICKNESS, UNICODE_RANGE, THINMATHSPACE, VERT_ORIGIN_X, - VERT_ORIGIN_Y, V_IDEOGRAPHIC, PRESERVEALPHA, SCRIPTMINSIZE, - SPECIFICATION, XLINK_ACTUATE, XLINK_ARCROLE, ACCEPT_CHARSET, - ALIGNMENTSCOPE, ARIA_MULTILINE, BASELINE_SHIFT, HORIZ_ORIGIN_X, - HORIZ_ORIGIN_Y, ONBEFOREUPDATE, ONFILTERCHANGE, ONROWSINSERTED, - ONBEFOREUNLOAD, MATHBACKGROUND, LETTER_SPACING, LIGHTING_COLOR, - THICKMATHSPACE, TEXT_RENDERING, V_MATHEMATICAL, POINTER_EVENTS, - PRIMITIVEUNITS, SYSTEMLANGUAGE, STROKE_LINECAP, SUBSCRIPTSHIFT, - STROKE_OPACITY, ARIA_DROPEFFECT, ARIA_LABELLEDBY, ARIA_TEMPLATEID, - COLOR_RENDERING, CONTENTEDITABLE, DIFFUSECONSTANT, ONDATAAVAILABLE, - ONCONTROLSELECT, IMAGE_RENDERING, MEDIUMMATHSPACE, TEXT_DECORATION, - SHAPE_RENDERING, STROKE_LINEJOIN, REPEAT_TEMPLATE, + PACKAGES, READONLY, SELECTED, ROWLINES, SEAMLESS, ROWALIGN, + STRETCHY, REQUIRED, XML_BASE, XML_LANG, X_HEIGHT, ARIA_OWNS, + AUTOFOCUS, ARIA_SORT, ACCESSKEY, ARIA_BUSY, ARIA_GRAB, AMPLITUDE, + ARIA_LIVE, CLIP_RULE, CLIP_PATH, EQUALROWS, ELEVATION, DIRECTION, + DRAGGABLE, FILTERRES, FILL_RULE, FONTSTYLE, FONT_SIZE, KEYPOINTS, + HIDEFOCUS, ONMESSAGE, INTERCEPT, ONDRAGEND, ONMOVEEND, ONINVALID, + ONKEYDOWN, ONFOCUSIN, ONMOUSEUP, INPUTMODE, ONROWEXIT, MATHCOLOR, + MASKUNITS, MAXLENGTH, LINEBREAK, LOOPSTART, TRANSFORM, V_HANGING, + VALUETYPE, POINTSATZ, POINTSATX, POINTSATY, PLAYCOUNT, SYMMETRIC, + SCROLLING, REPEATDUR, SELECTION, SEPARATOR, XML_SPACE, AUTOSUBMIT, + ALPHABETIC, ACTIONTYPE, ACCUMULATE, ARIA_LEVEL, COLUMNSPAN, + CAP_HEIGHT, BACKGROUND, GLYPH_NAME, GROUPALIGN, FONTFAMILY, + FONTWEIGHT, FONT_STYLE, KEYSPLINES, HTTP_EQUIV, ONACTIVATE, + OCCURRENCE, IRRELEVANT, ONDBLCLICK, ONDRAGDROP, ONKEYPRESS, + ONROWENTER, ONDRAGOVER, ONFOCUSOUT, ONMOUSEOUT, NUMOCTAVES, + MARKER_MID, MARKER_END, TEXTLENGTH, VISIBILITY, VIEWTARGET, + VERT_ADV_Y, PATHLENGTH, REPEAT_MAX, RADIOGROUP, STOP_COLOR, + SEPARATORS, REPEAT_MIN, ROWSPACING, ZOOMANDPAN, XLINK_TYPE, + XLINK_ROLE, XLINK_HREF, XLINK_SHOW, ACCENTUNDER, ARIA_SECRET, + ARIA_ATOMIC, ARIA_HIDDEN, ARIA_FLOWTO, ARABIC_FORM, CELLPADDING, + CELLSPACING, COLUMNWIDTH, COLUMNALIGN, COLUMNLINES, CONTEXTMENU, + BASEPROFILE, FONT_FAMILY, FRAMEBORDER, FILTERUNITS, FLOOD_COLOR, + FONT_WEIGHT, HORIZ_ADV_X, ONDRAGLEAVE, ONMOUSEMOVE, ORIENTATION, + ONMOUSEDOWN, ONMOUSEOVER, ONDRAGENTER, IDEOGRAPHIC, ONBEFORECUT, + ONFORMINPUT, ONDRAGSTART, ONMOVESTART, MARKERUNITS, MATHVARIANT, + MARGINWIDTH, MARKERWIDTH, TEXT_ANCHOR, TABLEVALUES, SCRIPTLEVEL, + REPEATCOUNT, STITCHTILES, STARTOFFSET, SCROLLDELAY, XMLNS_XLINK, + XLINK_TITLE, ARIA_INVALID, ARIA_PRESSED, ARIA_CHECKED, + AUTOCOMPLETE, ARIA_SETSIZE, ARIA_CHANNEL, EQUALCOLUMNS, + DISPLAYSTYLE, DATAFORMATAS, FILL_OPACITY, FONT_VARIANT, + FONT_STRETCH, FRAMESPACING, KERNELMATRIX, ONDEACTIVATE, + ONROWSDELETE, ONMOUSELEAVE, ONFORMCHANGE, ONCELLCHANGE, + ONMOUSEWHEEL, ONMOUSEENTER, ONAFTERPRINT, ONBEFORECOPY, + MARGINHEIGHT, MARKERHEIGHT, MARKER_START, MATHEMATICAL, + LENGTHADJUST, UNSELECTABLE, UNICODE_BIDI, UNITS_PER_EM, + WORD_SPACING, WRITING_MODE, V_ALPHABETIC, PATTERNUNITS, + SPREADMETHOD, SURFACESCALE, STROKE_WIDTH, REPEAT_START, + STDDEVIATION, STOP_OPACITY, ARIA_CONTROLS, ARIA_HASPOPUP, + ACCENT_HEIGHT, ARIA_VALUENOW, ARIA_RELEVANT, ARIA_POSINSET, + ARIA_VALUEMAX, ARIA_READONLY, ARIA_SELECTED, ARIA_REQUIRED, + ARIA_EXPANDED, ARIA_DISABLED, ATTRIBUTETYPE, ATTRIBUTENAME, + ARIA_DATATYPE, ARIA_VALUEMIN, BASEFREQUENCY, COLUMNSPACING, + COLOR_PROFILE, CLIPPATHUNITS, DEFINITIONURL, GRADIENTUNITS, + FLOOD_OPACITY, ONAFTERUPDATE, ONERRORUPDATE, ONBEFOREPASTE, + ONLOSECAPTURE, ONCONTEXTMENU, ONSELECTSTART, ONBEFOREPRINT, + MOVABLELIMITS, LINETHICKNESS, UNICODE_RANGE, THINMATHSPACE, + VERT_ORIGIN_X, VERT_ORIGIN_Y, V_IDEOGRAPHIC, PRESERVEALPHA, + SCRIPTMINSIZE, SPECIFICATION, XLINK_ACTUATE, XLINK_ARCROLE, + ACCEPT_CHARSET, ALIGNMENTSCOPE, ARIA_MULTILINE, BASELINE_SHIFT, + HORIZ_ORIGIN_X, HORIZ_ORIGIN_Y, ONBEFOREUPDATE, ONFILTERCHANGE, + ONROWSINSERTED, ONBEFOREUNLOAD, MATHBACKGROUND, LETTER_SPACING, + LIGHTING_COLOR, THICKMATHSPACE, TEXT_RENDERING, V_MATHEMATICAL, + POINTER_EVENTS, PRIMITIVEUNITS, SYSTEMLANGUAGE, STROKE_LINECAP, + SUBSCRIPTSHIFT, STROKE_OPACITY, ARIA_DROPEFFECT, ARIA_LABELLEDBY, + ARIA_TEMPLATEID, COLOR_RENDERING, CONTENTEDITABLE, DIFFUSECONSTANT, + ONDATAAVAILABLE, ONCONTROLSELECT, IMAGE_RENDERING, MEDIUMMATHSPACE, + TEXT_DECORATION, SHAPE_RENDERING, STROKE_LINEJOIN, REPEAT_TEMPLATE, ARIA_DESCRIBEDBY, CONTENTSTYLETYPE, FONT_SIZE_ADJUST, KERNELUNITLENGTH, ONBEFOREACTIVATE, ONPROPERTYCHANGE, ONDATASETCHANGED, MASKCONTENTUNITS, PATTERNTRANSFORM, REQUIREDFEATURES, RENDERING_INTENT, SPECULAREXPONENT, SPECULARCONSTANT, SUPERSCRIPTSHIFT, STROKE_DASHARRAY, XCHANNELSELECTOR, YCHANNELSELECTOR, ARIA_AUTOCOMPLETE, CONTENTSCRIPTTYPE, ENABLE_BACKGROUND, DOMINANT_BASELINE, GRADIENTTRANSFORM, ONBEFORDEACTIVATE, ONDATASETCOMPLETE, @@ -2911,64 +2914,63 @@ public final class AttributeName 251402351, 252339047, 253260911, 253293679, 254844367, 255547879, 256077281, 256345377, 258124199, 258354465, 258605063, 258744193, 258845603, 258856961, 258926689, 269869248, 270174334, 270709417, 270778994, 270781796, 271102503, 271478858, 271490090, 272870654, 273335275, 273369140, 273924313, 274108530, 274116736, 276818662, 277476156, 279156579, 279349675, 280108533, 280128712, 280132869, 280162403, 280280292, 280413430, 280506130, 280677397, 280678580, 280686710, 280689066, 282736758, 283110901, 283275116, 283823226, - 283890012, 284479340, 284606461, 286700477, 286798916, 291557706, - 291665349, 291804100, 292138018, 292166446, 292418738, 292451039, - 300298041, 300374839, 300597935, 303073389, 303083839, 303266673, - 303354997, 303430688, 303576261, 303724281, 303819694, 304242723, - 304382625, 306247792, 307227811, 307468786, 307724489, 309671175, - 310252031, 310358241, 310373094, 311015256, 313357609, 313683893, - 313701861, 313706996, 313707317, 313710350, 314027746, 314038181, - 314091299, 314205627, 314233813, 316741830, 316797986, 317486755, - 317794164, 318721061, 320076137, 322657125, 322887778, 323506876, - 323572412, 323605180, 323938869, 325060058, 325320188, 325398738, - 325541490, 325671619, 333868843, 336806130, 337212108, 337282686, - 337285434, 337585223, 338036037, 338298087, 338566051, 340943551, - 341190970, 342995704, 343352124, 343912673, 344585053, 346977248, - 347218098, 347262163, 347278576, 347438191, 347655959, 347684788, - 347726430, 347727772, 347776035, 347776629, 349500753, 350880161, - 350887073, 353384123, 355496998, 355906922, 355979793, 356545959, - 358637867, 358905016, 359164318, 359247286, 359350571, 359579447, - 365560330, 367399355, 367420285, 367510727, 368013212, 370234760, - 370353345, 370710317, 371074566, 371122285, 371194213, 371448425, - 371448430, 371545055, 371596922, 371758751, 371964792, 372151328, - 376550136, 376710172, 376795771, 376826271, 376906556, 380514830, - 380774774, 380775037, 381030322, 381136500, 381281631, 381282269, - 381285504, 381330595, 381331422, 381335911, 381336484, 383907298, - 383917408, 384595009, 384595013, 387799894, 387823201, 392581647, - 392584937, 392742684, 392906485, 393003349, 400644707, 400973830, - 404428547, 404432113, 404432865, 404469244, 404478897, 404694860, - 406887479, 408294949, 408789955, 410022510, 410467324, 410586448, - 410945965, 411845275, 414327152, 414327932, 414329781, 414346257, - 414346439, 414639928, 414835998, 414894517, 414986533, 417465377, - 417465381, 417492216, 418259232, 419310946, 420103495, 420242342, - 420380455, 420658662, 420717432, 423183880, 424539259, 425929170, - 425972964, 426050649, 426126450, 426142833, 426607922, 437289840, - 437347469, 437412335, 437423943, 437455540, 437462252, 437597991, - 437617485, 437986305, 437986507, 437986828, 437987072, 438015591, - 438034813, 438038966, 438179623, 438347971, 438483573, 438547062, - 438895551, 441592676, 442032555, 443548979, 447881379, 447881655, - 447881895, 447887844, 448416189, 448445746, 448449012, 450942191, - 452816744, 453668677, 454434495, 456610076, 456642844, 456738709, - 457544600, 459451897, 459680944, 468058810, 468083581, 470964084, - 471470955, 471567278, 472267822, 481177859, 481210627, 481435874, - 481455115, 481485378, 481490218, 485105638, 486005878, 486383494, - 487988916, 488103783, 490661867, 491574090, 491578272, 493041952, - 493441205, 493582844, 493716979, 504577572, 504740359, 505091638, - 505592418, 505656212, 509516275, 514998531, 515571132, 515594682, - 518712698, 521362273, 526592419, 526807354, 527348842, 538294791, - 539214049, 544689535, 545535009, 548544752, 548563346, 548595116, - 551679010, 558034099, 560329411, 560356209, 560671018, 560671152, - 560692590, 560845442, 569212097, 569474241, 572252718, 572768481, - 575326764, 576174758, 576190819, 582099184, 582099438, 582372519, - 582558889, 586552164, 591325418, 594231990, 594243961, 605711268, - 615672071, 616086845, 621792370, 624879850, 627432831, 640040548, - 654392808, 658675477, 659420283, 672891587, 694768102, 705890982, - 725543146, 759097578, 761686526, 795383908, 843809551, 878105336, - 908643300, 945213471, }; - + 283890012, 284479340, 284606461, 286700477, 286798916, 290305517, + 291557706, 291665349, 291804100, 292138018, 292166446, 292418738, + 292451039, 300298041, 300374839, 300597935, 303073389, 303083839, + 303266673, 303354997, 303430688, 303576261, 303724281, 303819694, + 304242723, 304382625, 306247792, 307227811, 307468786, 307724489, + 309671175, 310252031, 310358241, 310373094, 311015256, 313357609, + 313683893, 313701861, 313706996, 313707317, 313710350, 314027746, + 314038181, 314091299, 314205627, 314233813, 316741830, 316797986, + 317486755, 317794164, 318721061, 320076137, 322657125, 322887778, + 323506876, 323572412, 323605180, 323938869, 325060058, 325320188, + 325398738, 325541490, 325671619, 333868843, 336806130, 337212108, + 337282686, 337285434, 337585223, 338036037, 338298087, 338566051, + 340943551, 341190970, 342995704, 343352124, 343912673, 344585053, + 346977248, 347218098, 347262163, 347278576, 347438191, 347655959, + 347684788, 347726430, 347727772, 347776035, 347776629, 349500753, + 350880161, 350887073, 353384123, 355496998, 355906922, 355979793, + 356545959, 358637867, 358905016, 359164318, 359247286, 359350571, + 359579447, 365560330, 367399355, 367420285, 367510727, 368013212, + 370234760, 370353345, 370710317, 371074566, 371122285, 371194213, + 371448425, 371448430, 371545055, 371596922, 371758751, 371964792, + 372151328, 376550136, 376710172, 376795771, 376826271, 376906556, + 380514830, 380774774, 380775037, 381030322, 381136500, 381281631, + 381282269, 381285504, 381330595, 381331422, 381335911, 381336484, + 383907298, 383917408, 384595009, 384595013, 387799894, 387823201, + 392581647, 392584937, 392742684, 392906485, 393003349, 400644707, + 400973830, 404428547, 404432113, 404432865, 404469244, 404478897, + 404694860, 406887479, 408294949, 408789955, 410022510, 410467324, + 410586448, 410945965, 411845275, 414327152, 414327932, 414329781, + 414346257, 414346439, 414639928, 414835998, 414894517, 414986533, + 417465377, 417465381, 417492216, 418259232, 419310946, 420103495, + 420242342, 420380455, 420658662, 420717432, 423183880, 424539259, + 425929170, 425972964, 426050649, 426126450, 426142833, 426607922, + 437289840, 437347469, 437412335, 437423943, 437455540, 437462252, + 437597991, 437617485, 437986305, 437986507, 437986828, 437987072, + 438015591, 438034813, 438038966, 438179623, 438347971, 438483573, + 438547062, 438895551, 441592676, 442032555, 443548979, 447881379, + 447881655, 447881895, 447887844, 448416189, 448445746, 448449012, + 450942191, 452816744, 453668677, 454434495, 456610076, 456642844, + 456738709, 457544600, 459451897, 459680944, 468058810, 468083581, + 470964084, 471470955, 471567278, 472267822, 481177859, 481210627, + 481435874, 481455115, 481485378, 481490218, 485105638, 486005878, + 486383494, 487988916, 488103783, 490661867, 491574090, 491578272, + 493041952, 493441205, 493582844, 493716979, 504577572, 504740359, + 505091638, 505592418, 505656212, 509516275, 514998531, 515571132, + 515594682, 518712698, 521362273, 526592419, 526807354, 527348842, + 538294791, 539214049, 544689535, 545535009, 548544752, 548563346, + 548595116, 551679010, 558034099, 560329411, 560356209, 560671018, + 560671152, 560692590, 560845442, 569212097, 569474241, 572252718, + 572768481, 575326764, 576174758, 576190819, 582099184, 582099438, + 582372519, 582558889, 586552164, 591325418, 594231990, 594243961, + 605711268, 615672071, 616086845, 621792370, 624879850, 627432831, + 640040548, 654392808, 658675477, 659420283, 672891587, 694768102, + 705890982, 725543146, 759097578, 761686526, 795383908, 843809551, + 878105336, 908643300, 945213471, }; } diff --git a/parser/html/nsHtml5AtomList.h b/parser/html/nsHtml5AtomList.h --- a/parser/html/nsHtml5AtomList.h +++ b/parser/html/nsHtml5AtomList.h @@ -304,16 +304,17 @@ HTML5_ATOM(notation, "notation") HTML5_ATOM(noresize, "noresize") HTML5_ATOM(manifest, "manifest") HTML5_ATOM(mathsize, "mathsize") HTML5_ATOM(multiple, "multiple") HTML5_ATOM(longdesc, "longdesc") HTML5_ATOM(language, "language") HTML5_ATOM(template_, "template") HTML5_ATOM(tabindex, "tabindex") +HTML5_ATOM(packages, "packages") HTML5_ATOM(readonly, "readonly") HTML5_ATOM(selected, "selected") HTML5_ATOM(rowlines, "rowlines") HTML5_ATOM(seamless, "seamless") HTML5_ATOM(rowalign, "rowalign") HTML5_ATOM(stretchy, "stretchy") HTML5_ATOM(required, "required") HTML5_ATOM(xml_base, "xml:base") diff --git a/parser/html/nsHtml5AttributeName.cpp b/parser/html/nsHtml5AttributeName.cpp --- a/parser/html/nsHtml5AttributeName.cpp +++ b/parser/html/nsHtml5AttributeName.cpp @@ -186,17 +186,17 @@ nsHtml5AttributeName::getPrefix(PRInt32 } PRBool nsHtml5AttributeName::equalsAnother(nsHtml5AttributeName* another) { return this->getLocal(NS_HTML5ATTRIBUTE_NAME_HTML) == another->getLocal(NS_HTML5ATTRIBUTE_NAME_HTML); } -static PRInt32 const ATTRIBUTE_HASHES_DATA[] = { 1153, 1383, 1601, 1793, 1827, 1857, 68600, 69146, 69177, 70237, 70270, 71572, 71669, 72415, 72444, 74846, 74904, 74943, 75001, 75276, 75590, 84742, 84839, 85575, 85963, 85992, 87204, 88074, 88171, 89130, 89163, 3207892, 3283895, 3284791, 3338752, 3358197, 3369562, 3539124, 3562402, 3574260, 3670335, 3696933, 3721879, 135280021, 135346322, 136317019, 136475749, 136548517, 136652214, 136884919, 136902418, 136942992, 137292068, 139120259, 139785574, 142250603, 142314056, 142331176, 142519584, 144752417, 145106895, 146147200, 146765926, 148805544, 149655723, 149809441, 150018784, 150445028, 150923321, 152528754, 152536216, 152647366, 152962785, 155219321, 155654904, 157317483, 157350248, 157437941, 157447478, 157604838, 157685404, 157894402, 158315188, 166078431, 169409980, 169700259, 169856932, 170007032, 170409695, 170466488, 170513710, 170608367, 173028944, 173896963, 176090625, 176129212, 179390001, 179489057, 179627464, 179840468, 179849042, 180004216, 181779081, 183027151, 183645319, 183698797, 185922012, 185997252, 188312483, 188675799, 190977533, 190992569, 191006194, 191033518, 191038774, 191096249, 191166163, 191194426, 191522106, 191568039, 200104642, 202506661, 202537381, 202602917, 203070590, 203120766, 203389054, 203690071, 203971238, 203986524, 209040857, 209125756, 212055489, 212322418, 212746849, 213002877, 213055164, 213088023, 213259873, 213273386, 213435118, 213437318, 213438231, 213493071, 213532268, 213542834, 213584431, 213659891, 215285828, 215880731, 216112976, 216684637, 217369699, 217565298, 217576549, 218186795, 219743185, 220082234, 221623802, 221986406, 222283890, 223089542, 223138630, 223311265, 224547358, 224587256, 224589550, 224655650, 224785518, 224810917, 224813302, 225429618, 225432950, 225440869, 236107233, 236709921, 236838947, 237117095, 237143271, 237172455, 237209953, 237354143, 237372743, 237668065, 237703073, 237714273, 239743521, 240512803, 240522627, 240560417, 240656513, 241015715, 241062755, 241065383, 243523041, 245865199, 246261793, 246556195, 246774817, 246923491, 246928419, 246981667, 247014847, 247058369, 247112833, 247118177, 247119137, 247128739, 247316903, 249533729, 250235623, 250269543, 251083937, 251402351, 252339047, 253260911, 253293679, 254844367, 255547879, 256077281, 256345377, 258124199, 258354465, 258605063, 258744193, 258845603, 258856961, 258926689, 269869248, 270174334, 270709417, 270778994, 270781796, 271102503, 271478858, 271490090, 272870654, 273335275, 273369140, 273924313, 274108530, 274116736, 276818662, 277476156, 279156579, 279349675, 280108533, 280128712, 280132869, 280162403, 280280292, 280413430, 280506130, 280677397, 280678580, 280686710, 280689066, 282736758, 283110901, 283275116, 283823226, 283890012, 284479340, 284606461, 286700477, 286798916, 291557706, 291665349, 291804100, 292138018, 292166446, 292418738, 292451039, 300298041, 300374839, 300597935, 303073389, 303083839, 303266673, 303354997, 303430688, 303576261, 303724281, 303819694, 304242723, 304382625, 306247792, 307227811, 307468786, 307724489, 309671175, 310252031, 310358241, 310373094, 311015256, 313357609, 313683893, 313701861, 313706996, 313707317, 313710350, 314027746, 314038181, 314091299, 314205627, 314233813, 316741830, 316797986, 317486755, 317794164, 318721061, 320076137, 322657125, 322887778, 323506876, 323572412, 323605180, 323938869, 325060058, 325320188, 325398738, 325541490, 325671619, 333868843, 336806130, 337212108, 337282686, 337285434, 337585223, 338036037, 338298087, 338566051, 340943551, 341190970, 342995704, 343352124, 343912673, 344585053, 346977248, 347218098, 347262163, 347278576, 347438191, 347655959, 347684788, 347726430, 347727772, 347776035, 347776629, 349500753, 350880161, 350887073, 353384123, 355496998, 355906922, 355979793, 356545959, 358637867, 358905016, 359164318, 359247286, 359350571, 359579447, 365560330, 367399355, 367420285, 367510727, 368013212, 370234760, 370353345, 370710317, 371074566, 371122285, 371194213, 371448425, 371448430, 371545055, 371596922, 371758751, 371964792, 372151328, 376550136, 376710172, 376795771, 376826271, 376906556, 380514830, 380774774, 380775037, 381030322, 381136500, 381281631, 381282269, 381285504, 381330595, 381331422, 381335911, 381336484, 383907298, 383917408, 384595009, 384595013, 387799894, 387823201, 392581647, 392584937, 392742684, 392906485, 393003349, 400644707, 400973830, 404428547, 404432113, 404432865, 404469244, 404478897, 404694860, 406887479, 408294949, 408789955, 410022510, 410467324, 410586448, 410945965, 411845275, 414327152, 414327932, 414329781, 414346257, 414346439, 414639928, 414835998, 414894517, 414986533, 417465377, 417465381, 417492216, 418259232, 419310946, 420103495, 420242342, 420380455, 420658662, 420717432, 423183880, 424539259, 425929170, 425972964, 426050649, 426126450, 426142833, 426607922, 437289840, 437347469, 437412335, 437423943, 437455540, 437462252, 437597991, 437617485, 437986305, 437986507, 437986828, 437987072, 438015591, 438034813, 438038966, 438179623, 438347971, 438483573, 438547062, 438895551, 441592676, 442032555, 443548979, 447881379, 447881655, 447881895, 447887844, 448416189, 448445746, 448449012, 450942191, 452816744, 453668677, 454434495, 456610076, 456642844, 456738709, 457544600, 459451897, 459680944, 468058810, 468083581, 470964084, 471470955, 471567278, 472267822, 481177859, 481210627, 481435874, 481455115, 481485378, 481490218, 485105638, 486005878, 486383494, 487988916, 488103783, 490661867, 491574090, 491578272, 493041952, 493441205, 493582844, 493716979, 504577572, 504740359, 505091638, 505592418, 505656212, 509516275, 514998531, 515571132, 515594682, 518712698, 521362273, 526592419, 526807354, 527348842, 538294791, 539214049, 544689535, 545535009, 548544752, 548563346, 548595116, 551679010, 558034099, 560329411, 560356209, 560671018, 560671152, 560692590, 560845442, 569212097, 569474241, 572252718, 572768481, 575326764, 576174758, 576190819, 582099184, 582099438, 582372519, 582558889, 586552164, 591325418, 594231990, 594243961, 605711268, 615672071, 616086845, 621792370, 624879850, 627432831, 640040548, 654392808, 658675477, 659420283, 672891587, 694768102, 705890982, 725543146, 759097578, 761686526, 795383908, 843809551, 878105336, 908643300, 945213471 }; +static PRInt32 const ATTRIBUTE_HASHES_DATA[] = { 1153, 1383, 1601, 1793, 1827, 1857, 68600, 69146, 69177, 70237, 70270, 71572, 71669, 72415, 72444, 74846, 74904, 74943, 75001, 75276, 75590, 84742, 84839, 85575, 85963, 85992, 87204, 88074, 88171, 89130, 89163, 3207892, 3283895, 3284791, 3338752, 3358197, 3369562, 3539124, 3562402, 3574260, 3670335, 3696933, 3721879, 135280021, 135346322, 136317019, 136475749, 136548517, 136652214, 136884919, 136902418, 136942992, 137292068, 139120259, 139785574, 142250603, 142314056, 142331176, 142519584, 144752417, 145106895, 146147200, 146765926, 148805544, 149655723, 149809441, 150018784, 150445028, 150923321, 152528754, 152536216, 152647366, 152962785, 155219321, 155654904, 157317483, 157350248, 157437941, 157447478, 157604838, 157685404, 157894402, 158315188, 166078431, 169409980, 169700259, 169856932, 170007032, 170409695, 170466488, 170513710, 170608367, 173028944, 173896963, 176090625, 176129212, 179390001, 179489057, 179627464, 179840468, 179849042, 180004216, 181779081, 183027151, 183645319, 183698797, 185922012, 185997252, 188312483, 188675799, 190977533, 190992569, 191006194, 191033518, 191038774, 191096249, 191166163, 191194426, 191522106, 191568039, 200104642, 202506661, 202537381, 202602917, 203070590, 203120766, 203389054, 203690071, 203971238, 203986524, 209040857, 209125756, 212055489, 212322418, 212746849, 213002877, 213055164, 213088023, 213259873, 213273386, 213435118, 213437318, 213438231, 213493071, 213532268, 213542834, 213584431, 213659891, 215285828, 215880731, 216112976, 216684637, 217369699, 217565298, 217576549, 218186795, 219743185, 220082234, 221623802, 221986406, 222283890, 223089542, 223138630, 223311265, 224547358, 224587256, 224589550, 224655650, 224785518, 224810917, 224813302, 225429618, 225432950, 225440869, 236107233, 236709921, 236838947, 237117095, 237143271, 237172455, 237209953, 237354143, 237372743, 237668065, 237703073, 237714273, 239743521, 240512803, 240522627, 240560417, 240656513, 241015715, 241062755, 241065383, 243523041, 245865199, 246261793, 246556195, 246774817, 246923491, 246928419, 246981667, 247014847, 247058369, 247112833, 247118177, 247119137, 247128739, 247316903, 249533729, 250235623, 250269543, 251083937, 251402351, 252339047, 253260911, 253293679, 254844367, 255547879, 256077281, 256345377, 258124199, 258354465, 258605063, 258744193, 258845603, 258856961, 258926689, 269869248, 270174334, 270709417, 270778994, 270781796, 271102503, 271478858, 271490090, 272870654, 273335275, 273369140, 273924313, 274108530, 274116736, 276818662, 277476156, 279156579, 279349675, 280108533, 280128712, 280132869, 280162403, 280280292, 280413430, 280506130, 280677397, 280678580, 280686710, 280689066, 282736758, 283110901, 283275116, 283823226, 283890012, 284479340, 284606461, 286700477, 286798916, 290305517, 291557706, 291665349, 291804100, 292138018, 292166446, 292418738, 292451039, 300298041, 300374839, 300597935, 303073389, 303083839, 303266673, 303354997, 303430688, 303576261, 303724281, 303819694, 304242723, 304382625, 306247792, 307227811, 307468786, 307724489, 309671175, 310252031, 310358241, 310373094, 311015256, 313357609, 313683893, 313701861, 313706996, 313707317, 313710350, 314027746, 314038181, 314091299, 314205627, 314233813, 316741830, 316797986, 317486755, 317794164, 318721061, 320076137, 322657125, 322887778, 323506876, 323572412, 323605180, 323938869, 325060058, 325320188, 325398738, 325541490, 325671619, 333868843, 336806130, 337212108, 337282686, 337285434, 337585223, 338036037, 338298087, 338566051, 340943551, 341190970, 342995704, 343352124, 343912673, 344585053, 346977248, 347218098, 347262163, 347278576, 347438191, 347655959, 347684788, 347726430, 347727772, 347776035, 347776629, 349500753, 350880161, 350887073, 353384123, 355496998, 355906922, 355979793, 356545959, 358637867, 358905016, 359164318, 359247286, 359350571, 359579447, 365560330, 367399355, 367420285, 367510727, 368013212, 370234760, 370353345, 370710317, 371074566, 371122285, 371194213, 371448425, 371448430, 371545055, 371596922, 371758751, 371964792, 372151328, 376550136, 376710172, 376795771, 376826271, 376906556, 380514830, 380774774, 380775037, 381030322, 381136500, 381281631, 381282269, 381285504, 381330595, 381331422, 381335911, 381336484, 383907298, 383917408, 384595009, 384595013, 387799894, 387823201, 392581647, 392584937, 392742684, 392906485, 393003349, 400644707, 400973830, 404428547, 404432113, 404432865, 404469244, 404478897, 404694860, 406887479, 408294949, 408789955, 410022510, 410467324, 410586448, 410945965, 411845275, 414327152, 414327932, 414329781, 414346257, 414346439, 414639928, 414835998, 414894517, 414986533, 417465377, 417465381, 417492216, 418259232, 419310946, 420103495, 420242342, 420380455, 420658662, 420717432, 423183880, 424539259, 425929170, 425972964, 426050649, 426126450, 426142833, 426607922, 437289840, 437347469, 437412335, 437423943, 437455540, 437462252, 437597991, 437617485, 437986305, 437986507, 437986828, 437987072, 438015591, 438034813, 438038966, 438179623, 438347971, 438483573, 438547062, 438895551, 441592676, 442032555, 443548979, 447881379, 447881655, 447881895, 447887844, 448416189, 448445746, 448449012, 450942191, 452816744, 453668677, 454434495, 456610076, 456642844, 456738709, 457544600, 459451897, 459680944, 468058810, 468083581, 470964084, 471470955, 471567278, 472267822, 481177859, 481210627, 481435874, 481455115, 481485378, 481490218, 485105638, 486005878, 486383494, 487988916, 488103783, 490661867, 491574090, 491578272, 493041952, 493441205, 493582844, 493716979, 504577572, 504740359, 505091638, 505592418, 505656212, 509516275, 514998531, 515571132, 515594682, 518712698, 521362273, 526592419, 526807354, 527348842, 538294791, 539214049, 544689535, 545535009, 548544752, 548563346, 548595116, 551679010, 558034099, 560329411, 560356209, 560671018, 560671152, 560692590, 560845442, 569212097, 569474241, 572252718, 572768481, 575326764, 576174758, 576190819, 582099184, 582099438, 582372519, 582558889, 586552164, 591325418, 594231990, 594243961, 605711268, 615672071, 616086845, 621792370, 624879850, 627432831, 640040548, 654392808, 658675477, 659420283, 672891587, 694768102, 705890982, 725543146, 759097578, 761686526, 795383908, 843809551, 878105336, 908643300, 945213471 }; void nsHtml5AttributeName::initializeStatics() { ALL_NO_NS = new PRInt32[3]; ALL_NO_NS[0] = kNameSpaceID_None; ALL_NO_NS[1] = kNameSpaceID_None; ALL_NO_NS[2] = kNameSpaceID_None; XMLNS_NS = new PRInt32[3]; @@ -488,16 +488,17 @@ nsHtml5AttributeName::initializeStatics( ATTR_NORESIZE = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::noresize), ALL_NO_PREFIX); ATTR_MANIFEST = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::manifest), ALL_NO_PREFIX); ATTR_MATHSIZE = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::mathsize), ALL_NO_PREFIX); ATTR_MULTIPLE = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::multiple), ALL_NO_PREFIX); ATTR_LONGDESC = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::longdesc), ALL_NO_PREFIX); ATTR_LANGUAGE = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::language), ALL_NO_PREFIX); ATTR_TEMPLATE = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::template_), ALL_NO_PREFIX); ATTR_TABINDEX = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::tabindex), ALL_NO_PREFIX); + ATTR_PACKAGES = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::packages), ALL_NO_PREFIX); ATTR_READONLY = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::readonly), ALL_NO_PREFIX); ATTR_SELECTED = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::selected), ALL_NO_PREFIX); ATTR_ROWLINES = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::rowlines), ALL_NO_PREFIX); ATTR_SEAMLESS = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::seamless), ALL_NO_PREFIX); ATTR_ROWALIGN = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::rowalign), ALL_NO_PREFIX); ATTR_STRETCHY = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::stretchy), ALL_NO_PREFIX); ATTR_REQUIRED = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::required), ALL_NO_PREFIX); ATTR_XML_BASE = new nsHtml5AttributeName(XML_NS, COLONIFIED_LOCAL(nsHtml5Atoms::xml_base, nsHtml5Atoms::base), XML_PREFIX); @@ -803,17 +804,17 @@ nsHtml5AttributeName::initializeStatics( ATTR_VERYVERYTHINMATHSPACE = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::veryverythinmathspace), ALL_NO_PREFIX); ATTR_VERYVERYTHICKMATHSPACE = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::veryverythickmathspace), ALL_NO_PREFIX); ATTR_STRIKETHROUGH_POSITION = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::strikethrough_position), ALL_NO_PREFIX); ATTR_STRIKETHROUGH_THICKNESS = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::strikethrough_thickness), ALL_NO_PREFIX); ATTR_EXTERNALRESOURCESREQUIRED = new nsHtml5AttributeName(ALL_NO_NS, SVG_DIFFERENT(nsHtml5Atoms::externalresourcesrequired, nsHtml5Atoms::externalResourcesRequired), ALL_NO_PREFIX); ATTR_GLYPH_ORIENTATION_VERTICAL = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::glyph_orientation_vertical), ALL_NO_PREFIX); ATTR_COLOR_INTERPOLATION_FILTERS = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::color_interpolation_filters), ALL_NO_PREFIX); ATTR_GLYPH_ORIENTATION_HORIZONTAL = new nsHtml5AttributeName(ALL_NO_NS, SAME_LOCAL(nsHtml5Atoms::glyph_orientation_horizontal), ALL_NO_PREFIX); - ATTRIBUTE_NAMES = new nsHtml5AttributeName*[581]; + ATTRIBUTE_NAMES = new nsHtml5AttributeName*[582]; ATTRIBUTE_NAMES[0] = ATTR_D; ATTRIBUTE_NAMES[1] = ATTR_K; ATTRIBUTE_NAMES[2] = ATTR_R; ATTRIBUTE_NAMES[3] = ATTR_X; ATTRIBUTE_NAMES[4] = ATTR_Y; ATTRIBUTE_NAMES[5] = ATTR_Z; ATTRIBUTE_NAMES[6] = ATTR_BY; ATTRIBUTE_NAMES[7] = ATTR_CX; @@ -1070,332 +1071,333 @@ nsHtml5AttributeName::initializeStatics( ATTRIBUTE_NAMES[258] = ATTR_NORESIZE; ATTRIBUTE_NAMES[259] = ATTR_MANIFEST; ATTRIBUTE_NAMES[260] = ATTR_MATHSIZE; ATTRIBUTE_NAMES[261] = ATTR_MULTIPLE; ATTRIBUTE_NAMES[262] = ATTR_LONGDESC; ATTRIBUTE_NAMES[263] = ATTR_LANGUAGE; ATTRIBUTE_NAMES[264] = ATTR_TEMPLATE; ATTRIBUTE_NAMES[265] = ATTR_TABINDEX; - ATTRIBUTE_NAMES[266] = ATTR_READONLY; - ATTRIBUTE_NAMES[267] = ATTR_SELECTED; - ATTRIBUTE_NAMES[268] = ATTR_ROWLINES; - ATTRIBUTE_NAMES[269] = ATTR_SEAMLESS; - ATTRIBUTE_NAMES[270] = ATTR_ROWALIGN; - ATTRIBUTE_NAMES[271] = ATTR_STRETCHY; - ATTRIBUTE_NAMES[272] = ATTR_REQUIRED; - ATTRIBUTE_NAMES[273] = ATTR_XML_BASE; - ATTRIBUTE_NAMES[274] = ATTR_XML_LANG; - ATTRIBUTE_NAMES[275] = ATTR_X_HEIGHT; - ATTRIBUTE_NAMES[276] = ATTR_ARIA_OWNS; - ATTRIBUTE_NAMES[277] = ATTR_AUTOFOCUS; - ATTRIBUTE_NAMES[278] = ATTR_ARIA_SORT; - ATTRIBUTE_NAMES[279] = ATTR_ACCESSKEY; - ATTRIBUTE_NAMES[280] = ATTR_ARIA_BUSY; - ATTRIBUTE_NAMES[281] = ATTR_ARIA_GRAB; - ATTRIBUTE_NAMES[282] = ATTR_AMPLITUDE; - ATTRIBUTE_NAMES[283] = ATTR_ARIA_LIVE; - ATTRIBUTE_NAMES[284] = ATTR_CLIP_RULE; - ATTRIBUTE_NAMES[285] = ATTR_CLIP_PATH; - ATTRIBUTE_NAMES[286] = ATTR_EQUALROWS; - ATTRIBUTE_NAMES[287] = ATTR_ELEVATION; - ATTRIBUTE_NAMES[288] = ATTR_DIRECTION; - ATTRIBUTE_NAMES[289] = ATTR_DRAGGABLE; - ATTRIBUTE_NAMES[290] = ATTR_FILTERRES; - ATTRIBUTE_NAMES[291] = ATTR_FILL_RULE; - ATTRIBUTE_NAMES[292] = ATTR_FONTSTYLE; - ATTRIBUTE_NAMES[293] = ATTR_FONT_SIZE; - ATTRIBUTE_NAMES[294] = ATTR_KEYPOINTS; - ATTRIBUTE_NAMES[295] = ATTR_HIDEFOCUS; - ATTRIBUTE_NAMES[296] = ATTR_ONMESSAGE; - ATTRIBUTE_NAMES[297] = ATTR_INTERCEPT; - ATTRIBUTE_NAMES[298] = ATTR_ONDRAGEND; - ATTRIBUTE_NAMES[299] = ATTR_ONMOVEEND; - ATTRIBUTE_NAMES[300] = ATTR_ONINVALID; - ATTRIBUTE_NAMES[301] = ATTR_ONKEYDOWN; - ATTRIBUTE_NAMES[302] = ATTR_ONFOCUSIN; - ATTRIBUTE_NAMES[303] = ATTR_ONMOUSEUP; - ATTRIBUTE_NAMES[304] = ATTR_INPUTMODE; - ATTRIBUTE_NAMES[305] = ATTR_ONROWEXIT; - ATTRIBUTE_NAMES[306] = ATTR_MATHCOLOR; - ATTRIBUTE_NAMES[307] = ATTR_MASKUNITS; - ATTRIBUTE_NAMES[308] = ATTR_MAXLENGTH; - ATTRIBUTE_NAMES[309] = ATTR_LINEBREAK; - ATTRIBUTE_NAMES[310] = ATTR_LOOPSTART; - ATTRIBUTE_NAMES[311] = ATTR_TRANSFORM; - ATTRIBUTE_NAMES[312] = ATTR_V_HANGING; - ATTRIBUTE_NAMES[313] = ATTR_VALUETYPE; - ATTRIBUTE_NAMES[314] = ATTR_POINTSATZ; - ATTRIBUTE_NAMES[315] = ATTR_POINTSATX; - ATTRIBUTE_NAMES[316] = ATTR_POINTSATY; - ATTRIBUTE_NAMES[317] = ATTR_PLAYCOUNT; - ATTRIBUTE_NAMES[318] = ATTR_SYMMETRIC; - ATTRIBUTE_NAMES[319] = ATTR_SCROLLING; - ATTRIBUTE_NAMES[320] = ATTR_REPEATDUR; - ATTRIBUTE_NAMES[321] = ATTR_SELECTION; - ATTRIBUTE_NAMES[322] = ATTR_SEPARATOR; - ATTRIBUTE_NAMES[323] = ATTR_XML_SPACE; - ATTRIBUTE_NAMES[324] = ATTR_AUTOSUBMIT; - ATTRIBUTE_NAMES[325] = ATTR_ALPHABETIC; - ATTRIBUTE_NAMES[326] = ATTR_ACTIONTYPE; - ATTRIBUTE_NAMES[327] = ATTR_ACCUMULATE; - ATTRIBUTE_NAMES[328] = ATTR_ARIA_LEVEL; - ATTRIBUTE_NAMES[329] = ATTR_COLUMNSPAN; - ATTRIBUTE_NAMES[330] = ATTR_CAP_HEIGHT; - ATTRIBUTE_NAMES[331] = ATTR_BACKGROUND; - ATTRIBUTE_NAMES[332] = ATTR_GLYPH_NAME; - ATTRIBUTE_NAMES[333] = ATTR_GROUPALIGN; - ATTRIBUTE_NAMES[334] = ATTR_FONTFAMILY; - ATTRIBUTE_NAMES[335] = ATTR_FONTWEIGHT; - ATTRIBUTE_NAMES[336] = ATTR_FONT_STYLE; - ATTRIBUTE_NAMES[337] = ATTR_KEYSPLINES; - ATTRIBUTE_NAMES[338] = ATTR_HTTP_EQUIV; - ATTRIBUTE_NAMES[339] = ATTR_ONACTIVATE; - ATTRIBUTE_NAMES[340] = ATTR_OCCURRENCE; - ATTRIBUTE_NAMES[341] = ATTR_IRRELEVANT; - ATTRIBUTE_NAMES[342] = ATTR_ONDBLCLICK; - ATTRIBUTE_NAMES[343] = ATTR_ONDRAGDROP; - ATTRIBUTE_NAMES[344] = ATTR_ONKEYPRESS; - ATTRIBUTE_NAMES[345] = ATTR_ONROWENTER; - ATTRIBUTE_NAMES[346] = ATTR_ONDRAGOVER; - ATTRIBUTE_NAMES[347] = ATTR_ONFOCUSOUT; - ATTRIBUTE_NAMES[348] = ATTR_ONMOUSEOUT; - ATTRIBUTE_NAMES[349] = ATTR_NUMOCTAVES; - ATTRIBUTE_NAMES[350] = ATTR_MARKER_MID; - ATTRIBUTE_NAMES[351] = ATTR_MARKER_END; - ATTRIBUTE_NAMES[352] = ATTR_TEXTLENGTH; - ATTRIBUTE_NAMES[353] = ATTR_VISIBILITY; - ATTRIBUTE_NAMES[354] = ATTR_VIEWTARGET; - ATTRIBUTE_NAMES[355] = ATTR_VERT_ADV_Y; - ATTRIBUTE_NAMES[356] = ATTR_PATHLENGTH; - ATTRIBUTE_NAMES[357] = ATTR_REPEAT_MAX; - ATTRIBUTE_NAMES[358] = ATTR_RADIOGROUP; - ATTRIBUTE_NAMES[359] = ATTR_STOP_COLOR; - ATTRIBUTE_NAMES[360] = ATTR_SEPARATORS; - ATTRIBUTE_NAMES[361] = ATTR_REPEAT_MIN; - ATTRIBUTE_NAMES[362] = ATTR_ROWSPACING; - ATTRIBUTE_NAMES[363] = ATTR_ZOOMANDPAN; - ATTRIBUTE_NAMES[364] = ATTR_XLINK_TYPE; - ATTRIBUTE_NAMES[365] = ATTR_XLINK_ROLE; - ATTRIBUTE_NAMES[366] = ATTR_XLINK_HREF; - ATTRIBUTE_NAMES[367] = ATTR_XLINK_SHOW; - ATTRIBUTE_NAMES[368] = ATTR_ACCENTUNDER; - ATTRIBUTE_NAMES[369] = ATTR_ARIA_SECRET; - ATTRIBUTE_NAMES[370] = ATTR_ARIA_ATOMIC; - ATTRIBUTE_NAMES[371] = ATTR_ARIA_HIDDEN; - ATTRIBUTE_NAMES[372] = ATTR_ARIA_FLOWTO; - ATTRIBUTE_NAMES[373] = ATTR_ARABIC_FORM; - ATTRIBUTE_NAMES[374] = ATTR_CELLPADDING; - ATTRIBUTE_NAMES[375] = ATTR_CELLSPACING; - ATTRIBUTE_NAMES[376] = ATTR_COLUMNWIDTH; - ATTRIBUTE_NAMES[377] = ATTR_COLUMNALIGN; - ATTRIBUTE_NAMES[378] = ATTR_COLUMNLINES; - ATTRIBUTE_NAMES[379] = ATTR_CONTEXTMENU; - ATTRIBUTE_NAMES[380] = ATTR_BASEPROFILE; - ATTRIBUTE_NAMES[381] = ATTR_FONT_FAMILY; - ATTRIBUTE_NAMES[382] = ATTR_FRAMEBORDER; - ATTRIBUTE_NAMES[383] = ATTR_FILTERUNITS; - ATTRIBUTE_NAMES[384] = ATTR_FLOOD_COLOR; - ATTRIBUTE_NAMES[385] = ATTR_FONT_WEIGHT; - ATTRIBUTE_NAMES[386] = ATTR_HORIZ_ADV_X; - ATTRIBUTE_NAMES[387] = ATTR_ONDRAGLEAVE; - ATTRIBUTE_NAMES[388] = ATTR_ONMOUSEMOVE; - ATTRIBUTE_NAMES[389] = ATTR_ORIENTATION; - ATTRIBUTE_NAMES[390] = ATTR_ONMOUSEDOWN; - ATTRIBUTE_NAMES[391] = ATTR_ONMOUSEOVER; - ATTRIBUTE_NAMES[392] = ATTR_ONDRAGENTER; - ATTRIBUTE_NAMES[393] = ATTR_IDEOGRAPHIC; - ATTRIBUTE_NAMES[394] = ATTR_ONBEFORECUT; - ATTRIBUTE_NAMES[395] = ATTR_ONFORMINPUT; - ATTRIBUTE_NAMES[396] = ATTR_ONDRAGSTART; - ATTRIBUTE_NAMES[397] = ATTR_ONMOVESTART; - ATTRIBUTE_NAMES[398] = ATTR_MARKERUNITS; - ATTRIBUTE_NAMES[399] = ATTR_MATHVARIANT; - ATTRIBUTE_NAMES[400] = ATTR_MARGINWIDTH; - ATTRIBUTE_NAMES[401] = ATTR_MARKERWIDTH; - ATTRIBUTE_NAMES[402] = ATTR_TEXT_ANCHOR; - ATTRIBUTE_NAMES[403] = ATTR_TABLEVALUES; - ATTRIBUTE_NAMES[404] = ATTR_SCRIPTLEVEL; - ATTRIBUTE_NAMES[405] = ATTR_REPEATCOUNT; - ATTRIBUTE_NAMES[406] = ATTR_STITCHTILES; - ATTRIBUTE_NAMES[407] = ATTR_STARTOFFSET; - ATTRIBUTE_NAMES[408] = ATTR_SCROLLDELAY; - ATTRIBUTE_NAMES[409] = ATTR_XMLNS_XLINK; - ATTRIBUTE_NAMES[410] = ATTR_XLINK_TITLE; - ATTRIBUTE_NAMES[411] = ATTR_ARIA_INVALID; - ATTRIBUTE_NAMES[412] = ATTR_ARIA_PRESSED; - ATTRIBUTE_NAMES[413] = ATTR_ARIA_CHECKED; - ATTRIBUTE_NAMES[414] = ATTR_AUTOCOMPLETE; - ATTRIBUTE_NAMES[415] = ATTR_ARIA_SETSIZE; - ATTRIBUTE_NAMES[416] = ATTR_ARIA_CHANNEL; - ATTRIBUTE_NAMES[417] = ATTR_EQUALCOLUMNS; - ATTRIBUTE_NAMES[418] = ATTR_DISPLAYSTYLE; - ATTRIBUTE_NAMES[419] = ATTR_DATAFORMATAS; - ATTRIBUTE_NAMES[420] = ATTR_FILL_OPACITY; - ATTRIBUTE_NAMES[421] = ATTR_FONT_VARIANT; - ATTRIBUTE_NAMES[422] = ATTR_FONT_STRETCH; - ATTRIBUTE_NAMES[423] = ATTR_FRAMESPACING; - ATTRIBUTE_NAMES[424] = ATTR_KERNELMATRIX; - ATTRIBUTE_NAMES[425] = ATTR_ONDEACTIVATE; - ATTRIBUTE_NAMES[426] = ATTR_ONROWSDELETE; - ATTRIBUTE_NAMES[427] = ATTR_ONMOUSELEAVE; - ATTRIBUTE_NAMES[428] = ATTR_ONFORMCHANGE; - ATTRIBUTE_NAMES[429] = ATTR_ONCELLCHANGE; - ATTRIBUTE_NAMES[430] = ATTR_ONMOUSEWHEEL; - ATTRIBUTE_NAMES[431] = ATTR_ONMOUSEENTER; - ATTRIBUTE_NAMES[432] = ATTR_ONAFTERPRINT; - ATTRIBUTE_NAMES[433] = ATTR_ONBEFORECOPY; - ATTRIBUTE_NAMES[434] = ATTR_MARGINHEIGHT; - ATTRIBUTE_NAMES[435] = ATTR_MARKERHEIGHT; - ATTRIBUTE_NAMES[436] = ATTR_MARKER_START; - ATTRIBUTE_NAMES[437] = ATTR_MATHEMATICAL; - ATTRIBUTE_NAMES[438] = ATTR_LENGTHADJUST; - ATTRIBUTE_NAMES[439] = ATTR_UNSELECTABLE; - ATTRIBUTE_NAMES[440] = ATTR_UNICODE_BIDI; - ATTRIBUTE_NAMES[441] = ATTR_UNITS_PER_EM; - ATTRIBUTE_NAMES[442] = ATTR_WORD_SPACING; - ATTRIBUTE_NAMES[443] = ATTR_WRITING_MODE; - ATTRIBUTE_NAMES[444] = ATTR_V_ALPHABETIC; - ATTRIBUTE_NAMES[445] = ATTR_PATTERNUNITS; - ATTRIBUTE_NAMES[446] = ATTR_SPREADMETHOD; - ATTRIBUTE_NAMES[447] = ATTR_SURFACESCALE; - ATTRIBUTE_NAMES[448] = ATTR_STROKE_WIDTH; - ATTRIBUTE_NAMES[449] = ATTR_REPEAT_START; - ATTRIBUTE_NAMES[450] = ATTR_STDDEVIATION; - ATTRIBUTE_NAMES[451] = ATTR_STOP_OPACITY; - ATTRIBUTE_NAMES[452] = ATTR_ARIA_CONTROLS; - ATTRIBUTE_NAMES[453] = ATTR_ARIA_HASPOPUP; - ATTRIBUTE_NAMES[454] = ATTR_ACCENT_HEIGHT; - ATTRIBUTE_NAMES[455] = ATTR_ARIA_VALUENOW; - ATTRIBUTE_NAMES[456] = ATTR_ARIA_RELEVANT; - ATTRIBUTE_NAMES[457] = ATTR_ARIA_POSINSET; - ATTRIBUTE_NAMES[458] = ATTR_ARIA_VALUEMAX; - ATTRIBUTE_NAMES[459] = ATTR_ARIA_READONLY; - ATTRIBUTE_NAMES[460] = ATTR_ARIA_SELECTED; - ATTRIBUTE_NAMES[461] = ATTR_ARIA_REQUIRED; - ATTRIBUTE_NAMES[462] = ATTR_ARIA_EXPANDED; - ATTRIBUTE_NAMES[463] = ATTR_ARIA_DISABLED; - ATTRIBUTE_NAMES[464] = ATTR_ATTRIBUTETYPE; - ATTRIBUTE_NAMES[465] = ATTR_ATTRIBUTENAME; - ATTRIBUTE_NAMES[466] = ATTR_ARIA_DATATYPE; - ATTRIBUTE_NAMES[467] = ATTR_ARIA_VALUEMIN; - ATTRIBUTE_NAMES[468] = ATTR_BASEFREQUENCY; - ATTRIBUTE_NAMES[469] = ATTR_COLUMNSPACING; - ATTRIBUTE_NAMES[470] = ATTR_COLOR_PROFILE; - ATTRIBUTE_NAMES[471] = ATTR_CLIPPATHUNITS; - ATTRIBUTE_NAMES[472] = ATTR_DEFINITIONURL; - ATTRIBUTE_NAMES[473] = ATTR_GRADIENTUNITS; - ATTRIBUTE_NAMES[474] = ATTR_FLOOD_OPACITY; - ATTRIBUTE_NAMES[475] = ATTR_ONAFTERUPDATE; - ATTRIBUTE_NAMES[476] = ATTR_ONERRORUPDATE; - ATTRIBUTE_NAMES[477] = ATTR_ONBEFOREPASTE; - ATTRIBUTE_NAMES[478] = ATTR_ONLOSECAPTURE; - ATTRIBUTE_NAMES[479] = ATTR_ONCONTEXTMENU; - ATTRIBUTE_NAMES[480] = ATTR_ONSELECTSTART; - ATTRIBUTE_NAMES[481] = ATTR_ONBEFOREPRINT; - ATTRIBUTE_NAMES[482] = ATTR_MOVABLELIMITS; - ATTRIBUTE_NAMES[483] = ATTR_LINETHICKNESS; - ATTRIBUTE_NAMES[484] = ATTR_UNICODE_RANGE; - ATTRIBUTE_NAMES[485] = ATTR_THINMATHSPACE; - ATTRIBUTE_NAMES[486] = ATTR_VERT_ORIGIN_X; - ATTRIBUTE_NAMES[487] = ATTR_VERT_ORIGIN_Y; - ATTRIBUTE_NAMES[488] = ATTR_V_IDEOGRAPHIC; - ATTRIBUTE_NAMES[489] = ATTR_PRESERVEALPHA; - ATTRIBUTE_NAMES[490] = ATTR_SCRIPTMINSIZE; - ATTRIBUTE_NAMES[491] = ATTR_SPECIFICATION; - ATTRIBUTE_NAMES[492] = ATTR_XLINK_ACTUATE; - ATTRIBUTE_NAMES[493] = ATTR_XLINK_ARCROLE; - ATTRIBUTE_NAMES[494] = ATTR_ACCEPT_CHARSET; - ATTRIBUTE_NAMES[495] = ATTR_ALIGNMENTSCOPE; - ATTRIBUTE_NAMES[496] = ATTR_ARIA_MULTILINE; - ATTRIBUTE_NAMES[497] = ATTR_BASELINE_SHIFT; - ATTRIBUTE_NAMES[498] = ATTR_HORIZ_ORIGIN_X; - ATTRIBUTE_NAMES[499] = ATTR_HORIZ_ORIGIN_Y; - ATTRIBUTE_NAMES[500] = ATTR_ONBEFOREUPDATE; - ATTRIBUTE_NAMES[501] = ATTR_ONFILTERCHANGE; - ATTRIBUTE_NAMES[502] = ATTR_ONROWSINSERTED; - ATTRIBUTE_NAMES[503] = ATTR_ONBEFOREUNLOAD; - ATTRIBUTE_NAMES[504] = ATTR_MATHBACKGROUND; - ATTRIBUTE_NAMES[505] = ATTR_LETTER_SPACING; - ATTRIBUTE_NAMES[506] = ATTR_LIGHTING_COLOR; - ATTRIBUTE_NAMES[507] = ATTR_THICKMATHSPACE; - ATTRIBUTE_NAMES[508] = ATTR_TEXT_RENDERING; - ATTRIBUTE_NAMES[509] = ATTR_V_MATHEMATICAL; - ATTRIBUTE_NAMES[510] = ATTR_POINTER_EVENTS; - ATTRIBUTE_NAMES[511] = ATTR_PRIMITIVEUNITS; - ATTRIBUTE_NAMES[512] = ATTR_SYSTEMLANGUAGE; - ATTRIBUTE_NAMES[513] = ATTR_STROKE_LINECAP; - ATTRIBUTE_NAMES[514] = ATTR_SUBSCRIPTSHIFT; - ATTRIBUTE_NAMES[515] = ATTR_STROKE_OPACITY; - ATTRIBUTE_NAMES[516] = ATTR_ARIA_DROPEFFECT; - ATTRIBUTE_NAMES[517] = ATTR_ARIA_LABELLEDBY; - ATTRIBUTE_NAMES[518] = ATTR_ARIA_TEMPLATEID; - ATTRIBUTE_NAMES[519] = ATTR_COLOR_RENDERING; - ATTRIBUTE_NAMES[520] = ATTR_CONTENTEDITABLE; - ATTRIBUTE_NAMES[521] = ATTR_DIFFUSECONSTANT; - ATTRIBUTE_NAMES[522] = ATTR_ONDATAAVAILABLE; - ATTRIBUTE_NAMES[523] = ATTR_ONCONTROLSELECT; - ATTRIBUTE_NAMES[524] = ATTR_IMAGE_RENDERING; - ATTRIBUTE_NAMES[525] = ATTR_MEDIUMMATHSPACE; - ATTRIBUTE_NAMES[526] = ATTR_TEXT_DECORATION; - ATTRIBUTE_NAMES[527] = ATTR_SHAPE_RENDERING; - ATTRIBUTE_NAMES[528] = ATTR_STROKE_LINEJOIN; - ATTRIBUTE_NAMES[529] = ATTR_REPEAT_TEMPLATE; - ATTRIBUTE_NAMES[530] = ATTR_ARIA_DESCRIBEDBY; - ATTRIBUTE_NAMES[531] = ATTR_CONTENTSTYLETYPE; - ATTRIBUTE_NAMES[532] = ATTR_FONT_SIZE_ADJUST; - ATTRIBUTE_NAMES[533] = ATTR_KERNELUNITLENGTH; - ATTRIBUTE_NAMES[534] = ATTR_ONBEFOREACTIVATE; - ATTRIBUTE_NAMES[535] = ATTR_ONPROPERTYCHANGE; - ATTRIBUTE_NAMES[536] = ATTR_ONDATASETCHANGED; - ATTRIBUTE_NAMES[537] = ATTR_MASKCONTENTUNITS; - ATTRIBUTE_NAMES[538] = ATTR_PATTERNTRANSFORM; - ATTRIBUTE_NAMES[539] = ATTR_REQUIREDFEATURES; - ATTRIBUTE_NAMES[540] = ATTR_RENDERING_INTENT; - ATTRIBUTE_NAMES[541] = ATTR_SPECULAREXPONENT; - ATTRIBUTE_NAMES[542] = ATTR_SPECULARCONSTANT; - ATTRIBUTE_NAMES[543] = ATTR_SUPERSCRIPTSHIFT; - ATTRIBUTE_NAMES[544] = ATTR_STROKE_DASHARRAY; - ATTRIBUTE_NAMES[545] = ATTR_XCHANNELSELECTOR; - ATTRIBUTE_NAMES[546] = ATTR_YCHANNELSELECTOR; - ATTRIBUTE_NAMES[547] = ATTR_ARIA_AUTOCOMPLETE; - ATTRIBUTE_NAMES[548] = ATTR_CONTENTSCRIPTTYPE; - ATTRIBUTE_NAMES[549] = ATTR_ENABLE_BACKGROUND; - ATTRIBUTE_NAMES[550] = ATTR_DOMINANT_BASELINE; - ATTRIBUTE_NAMES[551] = ATTR_GRADIENTTRANSFORM; - ATTRIBUTE_NAMES[552] = ATTR_ONBEFORDEACTIVATE; - ATTRIBUTE_NAMES[553] = ATTR_ONDATASETCOMPLETE; - ATTRIBUTE_NAMES[554] = ATTR_OVERLINE_POSITION; - ATTRIBUTE_NAMES[555] = ATTR_ONBEFOREEDITFOCUS; - ATTRIBUTE_NAMES[556] = ATTR_LIMITINGCONEANGLE; - ATTRIBUTE_NAMES[557] = ATTR_VERYTHINMATHSPACE; - ATTRIBUTE_NAMES[558] = ATTR_STROKE_DASHOFFSET; - ATTRIBUTE_NAMES[559] = ATTR_STROKE_MITERLIMIT; - ATTRIBUTE_NAMES[560] = ATTR_ALIGNMENT_BASELINE; - ATTRIBUTE_NAMES[561] = ATTR_ONREADYSTATECHANGE; - ATTRIBUTE_NAMES[562] = ATTR_OVERLINE_THICKNESS; - ATTRIBUTE_NAMES[563] = ATTR_UNDERLINE_POSITION; - ATTRIBUTE_NAMES[564] = ATTR_VERYTHICKMATHSPACE; - ATTRIBUTE_NAMES[565] = ATTR_REQUIREDEXTENSIONS; - ATTRIBUTE_NAMES[566] = ATTR_COLOR_INTERPOLATION; - ATTRIBUTE_NAMES[567] = ATTR_UNDERLINE_THICKNESS; - ATTRIBUTE_NAMES[568] = ATTR_PRESERVEASPECTRATIO; - ATTRIBUTE_NAMES[569] = ATTR_PATTERNCONTENTUNITS; - ATTRIBUTE_NAMES[570] = ATTR_ARIA_MULTISELECTABLE; - ATTRIBUTE_NAMES[571] = ATTR_SCRIPTSIZEMULTIPLIER; - ATTRIBUTE_NAMES[572] = ATTR_ARIA_ACTIVEDESCENDANT; - ATTRIBUTE_NAMES[573] = ATTR_VERYVERYTHINMATHSPACE; - ATTRIBUTE_NAMES[574] = ATTR_VERYVERYTHICKMATHSPACE; - ATTRIBUTE_NAMES[575] = ATTR_STRIKETHROUGH_POSITION; - ATTRIBUTE_NAMES[576] = ATTR_STRIKETHROUGH_THICKNESS; - ATTRIBUTE_NAMES[577] = ATTR_EXTERNALRESOURCESREQUIRED; - ATTRIBUTE_NAMES[578] = ATTR_GLYPH_ORIENTATION_VERTICAL; - ATTRIBUTE_NAMES[579] = ATTR_COLOR_INTERPOLATION_FILTERS; - ATTRIBUTE_NAMES[580] = ATTR_GLYPH_ORIENTATION_HORIZONTAL; - ATTRIBUTE_HASHES = jArray((PRInt32*)ATTRIBUTE_HASHES_DATA, 581); + ATTRIBUTE_NAMES[266] = ATTR_PACKAGES; + ATTRIBUTE_NAMES[267] = ATTR_READONLY; + ATTRIBUTE_NAMES[268] = ATTR_SELECTED; + ATTRIBUTE_NAMES[269] = ATTR_ROWLINES; + ATTRIBUTE_NAMES[270] = ATTR_SEAMLESS; + ATTRIBUTE_NAMES[271] = ATTR_ROWALIGN; + ATTRIBUTE_NAMES[272] = ATTR_STRETCHY; + ATTRIBUTE_NAMES[273] = ATTR_REQUIRED; + ATTRIBUTE_NAMES[274] = ATTR_XML_BASE; + ATTRIBUTE_NAMES[275] = ATTR_XML_LANG; + ATTRIBUTE_NAMES[276] = ATTR_X_HEIGHT; + ATTRIBUTE_NAMES[277] = ATTR_ARIA_OWNS; + ATTRIBUTE_NAMES[278] = ATTR_AUTOFOCUS; + ATTRIBUTE_NAMES[279] = ATTR_ARIA_SORT; + ATTRIBUTE_NAMES[280] = ATTR_ACCESSKEY; + ATTRIBUTE_NAMES[281] = ATTR_ARIA_BUSY; + ATTRIBUTE_NAMES[282] = ATTR_ARIA_GRAB; + ATTRIBUTE_NAMES[283] = ATTR_AMPLITUDE; + ATTRIBUTE_NAMES[284] = ATTR_ARIA_LIVE; + ATTRIBUTE_NAMES[285] = ATTR_CLIP_RULE; + ATTRIBUTE_NAMES[286] = ATTR_CLIP_PATH; + ATTRIBUTE_NAMES[287] = ATTR_EQUALROWS; + ATTRIBUTE_NAMES[288] = ATTR_ELEVATION; + ATTRIBUTE_NAMES[289] = ATTR_DIRECTION; + ATTRIBUTE_NAMES[290] = ATTR_DRAGGABLE; + ATTRIBUTE_NAMES[291] = ATTR_FILTERRES; + ATTRIBUTE_NAMES[292] = ATTR_FILL_RULE; + ATTRIBUTE_NAMES[293] = ATTR_FONTSTYLE; + ATTRIBUTE_NAMES[294] = ATTR_FONT_SIZE; + ATTRIBUTE_NAMES[295] = ATTR_KEYPOINTS; + ATTRIBUTE_NAMES[296] = ATTR_HIDEFOCUS; + ATTRIBUTE_NAMES[297] = ATTR_ONMESSAGE; + ATTRIBUTE_NAMES[298] = ATTR_INTERCEPT; + ATTRIBUTE_NAMES[299] = ATTR_ONDRAGEND; + ATTRIBUTE_NAMES[300] = ATTR_ONMOVEEND; + ATTRIBUTE_NAMES[301] = ATTR_ONINVALID; + ATTRIBUTE_NAMES[302] = ATTR_ONKEYDOWN; + ATTRIBUTE_NAMES[303] = ATTR_ONFOCUSIN; + ATTRIBUTE_NAMES[304] = ATTR_ONMOUSEUP; + ATTRIBUTE_NAMES[305] = ATTR_INPUTMODE; + ATTRIBUTE_NAMES[306] = ATTR_ONROWEXIT; + ATTRIBUTE_NAMES[307] = ATTR_MATHCOLOR; + ATTRIBUTE_NAMES[308] = ATTR_MASKUNITS; + ATTRIBUTE_NAMES[309] = ATTR_MAXLENGTH; + ATTRIBUTE_NAMES[310] = ATTR_LINEBREAK; + ATTRIBUTE_NAMES[311] = ATTR_LOOPSTART; + ATTRIBUTE_NAMES[312] = ATTR_TRANSFORM; + ATTRIBUTE_NAMES[313] = ATTR_V_HANGING; + ATTRIBUTE_NAMES[314] = ATTR_VALUETYPE; + ATTRIBUTE_NAMES[315] = ATTR_POINTSATZ; + ATTRIBUTE_NAMES[316] = ATTR_POINTSATX; + ATTRIBUTE_NAMES[317] = ATTR_POINTSATY; + ATTRIBUTE_NAMES[318] = ATTR_PLAYCOUNT; + ATTRIBUTE_NAMES[319] = ATTR_SYMMETRIC; + ATTRIBUTE_NAMES[320] = ATTR_SCROLLING; + ATTRIBUTE_NAMES[321] = ATTR_REPEATDUR; + ATTRIBUTE_NAMES[322] = ATTR_SELECTION; + ATTRIBUTE_NAMES[323] = ATTR_SEPARATOR; + ATTRIBUTE_NAMES[324] = ATTR_XML_SPACE; + ATTRIBUTE_NAMES[325] = ATTR_AUTOSUBMIT; + ATTRIBUTE_NAMES[326] = ATTR_ALPHABETIC; + ATTRIBUTE_NAMES[327] = ATTR_ACTIONTYPE; + ATTRIBUTE_NAMES[328] = ATTR_ACCUMULATE; + ATTRIBUTE_NAMES[329] = ATTR_ARIA_LEVEL; + ATTRIBUTE_NAMES[330] = ATTR_COLUMNSPAN; + ATTRIBUTE_NAMES[331] = ATTR_CAP_HEIGHT; + ATTRIBUTE_NAMES[332] = ATTR_BACKGROUND; + ATTRIBUTE_NAMES[333] = ATTR_GLYPH_NAME; + ATTRIBUTE_NAMES[334] = ATTR_GROUPALIGN; + ATTRIBUTE_NAMES[335] = ATTR_FONTFAMILY; + ATTRIBUTE_NAMES[336] = ATTR_FONTWEIGHT; + ATTRIBUTE_NAMES[337] = ATTR_FONT_STYLE; + ATTRIBUTE_NAMES[338] = ATTR_KEYSPLINES; + ATTRIBUTE_NAMES[339] = ATTR_HTTP_EQUIV; + ATTRIBUTE_NAMES[340] = ATTR_ONACTIVATE; + ATTRIBUTE_NAMES[341] = ATTR_OCCURRENCE; + ATTRIBUTE_NAMES[342] = ATTR_IRRELEVANT; + ATTRIBUTE_NAMES[343] = ATTR_ONDBLCLICK; + ATTRIBUTE_NAMES[344] = ATTR_ONDRAGDROP; + ATTRIBUTE_NAMES[345] = ATTR_ONKEYPRESS; + ATTRIBUTE_NAMES[346] = ATTR_ONROWENTER; + ATTRIBUTE_NAMES[347] = ATTR_ONDRAGOVER; + ATTRIBUTE_NAMES[348] = ATTR_ONFOCUSOUT; + ATTRIBUTE_NAMES[349] = ATTR_ONMOUSEOUT; + ATTRIBUTE_NAMES[350] = ATTR_NUMOCTAVES; + ATTRIBUTE_NAMES[351] = ATTR_MARKER_MID; + ATTRIBUTE_NAMES[352] = ATTR_MARKER_END; + ATTRIBUTE_NAMES[353] = ATTR_TEXTLENGTH; + ATTRIBUTE_NAMES[354] = ATTR_VISIBILITY; + ATTRIBUTE_NAMES[355] = ATTR_VIEWTARGET; + ATTRIBUTE_NAMES[356] = ATTR_VERT_ADV_Y; + ATTRIBUTE_NAMES[357] = ATTR_PATHLENGTH; + ATTRIBUTE_NAMES[358] = ATTR_REPEAT_MAX; + ATTRIBUTE_NAMES[359] = ATTR_RADIOGROUP; + ATTRIBUTE_NAMES[360] = ATTR_STOP_COLOR; + ATTRIBUTE_NAMES[361] = ATTR_SEPARATORS; + ATTRIBUTE_NAMES[362] = ATTR_REPEAT_MIN; + ATTRIBUTE_NAMES[363] = ATTR_ROWSPACING; + ATTRIBUTE_NAMES[364] = ATTR_ZOOMANDPAN; + ATTRIBUTE_NAMES[365] = ATTR_XLINK_TYPE; + ATTRIBUTE_NAMES[366] = ATTR_XLINK_ROLE; + ATTRIBUTE_NAMES[367] = ATTR_XLINK_HREF; + ATTRIBUTE_NAMES[368] = ATTR_XLINK_SHOW; + ATTRIBUTE_NAMES[369] = ATTR_ACCENTUNDER; + ATTRIBUTE_NAMES[370] = ATTR_ARIA_SECRET; + ATTRIBUTE_NAMES[371] = ATTR_ARIA_ATOMIC; + ATTRIBUTE_NAMES[372] = ATTR_ARIA_HIDDEN; + ATTRIBUTE_NAMES[373] = ATTR_ARIA_FLOWTO; + ATTRIBUTE_NAMES[374] = ATTR_ARABIC_FORM; + ATTRIBUTE_NAMES[375] = ATTR_CELLPADDING; + ATTRIBUTE_NAMES[376] = ATTR_CELLSPACING; + ATTRIBUTE_NAMES[377] = ATTR_COLUMNWIDTH; + ATTRIBUTE_NAMES[378] = ATTR_COLUMNALIGN; + ATTRIBUTE_NAMES[379] = ATTR_COLUMNLINES; + ATTRIBUTE_NAMES[380] = ATTR_CONTEXTMENU; + ATTRIBUTE_NAMES[381] = ATTR_BASEPROFILE; + ATTRIBUTE_NAMES[382] = ATTR_FONT_FAMILY; + ATTRIBUTE_NAMES[383] = ATTR_FRAMEBORDER; + ATTRIBUTE_NAMES[384] = ATTR_FILTERUNITS; + ATTRIBUTE_NAMES[385] = ATTR_FLOOD_COLOR; + ATTRIBUTE_NAMES[386] = ATTR_FONT_WEIGHT; + ATTRIBUTE_NAMES[387] = ATTR_HORIZ_ADV_X; + ATTRIBUTE_NAMES[388] = ATTR_ONDRAGLEAVE; + ATTRIBUTE_NAMES[389] = ATTR_ONMOUSEMOVE; + ATTRIBUTE_NAMES[390] = ATTR_ORIENTATION; + ATTRIBUTE_NAMES[391] = ATTR_ONMOUSEDOWN; + ATTRIBUTE_NAMES[392] = ATTR_ONMOUSEOVER; + ATTRIBUTE_NAMES[393] = ATTR_ONDRAGENTER; + ATTRIBUTE_NAMES[394] = ATTR_IDEOGRAPHIC; + ATTRIBUTE_NAMES[395] = ATTR_ONBEFORECUT; + ATTRIBUTE_NAMES[396] = ATTR_ONFORMINPUT; + ATTRIBUTE_NAMES[397] = ATTR_ONDRAGSTART; + ATTRIBUTE_NAMES[398] = ATTR_ONMOVESTART; + ATTRIBUTE_NAMES[399] = ATTR_MARKERUNITS; + ATTRIBUTE_NAMES[400] = ATTR_MATHVARIANT; + ATTRIBUTE_NAMES[401] = ATTR_MARGINWIDTH; + ATTRIBUTE_NAMES[402] = ATTR_MARKERWIDTH; + ATTRIBUTE_NAMES[403] = ATTR_TEXT_ANCHOR; + ATTRIBUTE_NAMES[404] = ATTR_TABLEVALUES; + ATTRIBUTE_NAMES[405] = ATTR_SCRIPTLEVEL; + ATTRIBUTE_NAMES[406] = ATTR_REPEATCOUNT; + ATTRIBUTE_NAMES[407] = ATTR_STITCHTILES; + ATTRIBUTE_NAMES[408] = ATTR_STARTOFFSET; + ATTRIBUTE_NAMES[409] = ATTR_SCROLLDELAY; + ATTRIBUTE_NAMES[410] = ATTR_XMLNS_XLINK; + ATTRIBUTE_NAMES[411] = ATTR_XLINK_TITLE; + ATTRIBUTE_NAMES[412] = ATTR_ARIA_INVALID; + ATTRIBUTE_NAMES[413] = ATTR_ARIA_PRESSED; + ATTRIBUTE_NAMES[414] = ATTR_ARIA_CHECKED; + ATTRIBUTE_NAMES[415] = ATTR_AUTOCOMPLETE; + ATTRIBUTE_NAMES[416] = ATTR_ARIA_SETSIZE; + ATTRIBUTE_NAMES[417] = ATTR_ARIA_CHANNEL; + ATTRIBUTE_NAMES[418] = ATTR_EQUALCOLUMNS; + ATTRIBUTE_NAMES[419] = ATTR_DISPLAYSTYLE; + ATTRIBUTE_NAMES[420] = ATTR_DATAFORMATAS; + ATTRIBUTE_NAMES[421] = ATTR_FILL_OPACITY; + ATTRIBUTE_NAMES[422] = ATTR_FONT_VARIANT; + ATTRIBUTE_NAMES[423] = ATTR_FONT_STRETCH; + ATTRIBUTE_NAMES[424] = ATTR_FRAMESPACING; + ATTRIBUTE_NAMES[425] = ATTR_KERNELMATRIX; + ATTRIBUTE_NAMES[426] = ATTR_ONDEACTIVATE; + ATTRIBUTE_NAMES[427] = ATTR_ONROWSDELETE; + ATTRIBUTE_NAMES[428] = ATTR_ONMOUSELEAVE; + ATTRIBUTE_NAMES[429] = ATTR_ONFORMCHANGE; + ATTRIBUTE_NAMES[430] = ATTR_ONCELLCHANGE; + ATTRIBUTE_NAMES[431] = ATTR_ONMOUSEWHEEL; + ATTRIBUTE_NAMES[432] = ATTR_ONMOUSEENTER; + ATTRIBUTE_NAMES[433] = ATTR_ONAFTERPRINT; + ATTRIBUTE_NAMES[434] = ATTR_ONBEFORECOPY; + ATTRIBUTE_NAMES[435] = ATTR_MARGINHEIGHT; + ATTRIBUTE_NAMES[436] = ATTR_MARKERHEIGHT; + ATTRIBUTE_NAMES[437] = ATTR_MARKER_START; + ATTRIBUTE_NAMES[438] = ATTR_MATHEMATICAL; + ATTRIBUTE_NAMES[439] = ATTR_LENGTHADJUST; + ATTRIBUTE_NAMES[440] = ATTR_UNSELECTABLE; + ATTRIBUTE_NAMES[441] = ATTR_UNICODE_BIDI; + ATTRIBUTE_NAMES[442] = ATTR_UNITS_PER_EM; + ATTRIBUTE_NAMES[443] = ATTR_WORD_SPACING; + ATTRIBUTE_NAMES[444] = ATTR_WRITING_MODE; + ATTRIBUTE_NAMES[445] = ATTR_V_ALPHABETIC; + ATTRIBUTE_NAMES[446] = ATTR_PATTERNUNITS; + ATTRIBUTE_NAMES[447] = ATTR_SPREADMETHOD; + ATTRIBUTE_NAMES[448] = ATTR_SURFACESCALE; + ATTRIBUTE_NAMES[449] = ATTR_STROKE_WIDTH; + ATTRIBUTE_NAMES[450] = ATTR_REPEAT_START; + ATTRIBUTE_NAMES[451] = ATTR_STDDEVIATION; + ATTRIBUTE_NAMES[452] = ATTR_STOP_OPACITY; + ATTRIBUTE_NAMES[453] = ATTR_ARIA_CONTROLS; + ATTRIBUTE_NAMES[454] = ATTR_ARIA_HASPOPUP; + ATTRIBUTE_NAMES[455] = ATTR_ACCENT_HEIGHT; + ATTRIBUTE_NAMES[456] = ATTR_ARIA_VALUENOW; + ATTRIBUTE_NAMES[457] = ATTR_ARIA_RELEVANT; + ATTRIBUTE_NAMES[458] = ATTR_ARIA_POSINSET; + ATTRIBUTE_NAMES[459] = ATTR_ARIA_VALUEMAX; + ATTRIBUTE_NAMES[460] = ATTR_ARIA_READONLY; + ATTRIBUTE_NAMES[461] = ATTR_ARIA_SELECTED; + ATTRIBUTE_NAMES[462] = ATTR_ARIA_REQUIRED; + ATTRIBUTE_NAMES[463] = ATTR_ARIA_EXPANDED; + ATTRIBUTE_NAMES[464] = ATTR_ARIA_DISABLED; + ATTRIBUTE_NAMES[465] = ATTR_ATTRIBUTETYPE; + ATTRIBUTE_NAMES[466] = ATTR_ATTRIBUTENAME; + ATTRIBUTE_NAMES[467] = ATTR_ARIA_DATATYPE; + ATTRIBUTE_NAMES[468] = ATTR_ARIA_VALUEMIN; + ATTRIBUTE_NAMES[469] = ATTR_BASEFREQUENCY; + ATTRIBUTE_NAMES[470] = ATTR_COLUMNSPACING; + ATTRIBUTE_NAMES[471] = ATTR_COLOR_PROFILE; + ATTRIBUTE_NAMES[472] = ATTR_CLIPPATHUNITS; + ATTRIBUTE_NAMES[473] = ATTR_DEFINITIONURL; + ATTRIBUTE_NAMES[474] = ATTR_GRADIENTUNITS; + ATTRIBUTE_NAMES[475] = ATTR_FLOOD_OPACITY; + ATTRIBUTE_NAMES[476] = ATTR_ONAFTERUPDATE; + ATTRIBUTE_NAMES[477] = ATTR_ONERRORUPDATE; + ATTRIBUTE_NAMES[478] = ATTR_ONBEFOREPASTE; + ATTRIBUTE_NAMES[479] = ATTR_ONLOSECAPTURE; + ATTRIBUTE_NAMES[480] = ATTR_ONCONTEXTMENU; + ATTRIBUTE_NAMES[481] = ATTR_ONSELECTSTART; + ATTRIBUTE_NAMES[482] = ATTR_ONBEFOREPRINT; + ATTRIBUTE_NAMES[483] = ATTR_MOVABLELIMITS; + ATTRIBUTE_NAMES[484] = ATTR_LINETHICKNESS; + ATTRIBUTE_NAMES[485] = ATTR_UNICODE_RANGE; + ATTRIBUTE_NAMES[486] = ATTR_THINMATHSPACE; + ATTRIBUTE_NAMES[487] = ATTR_VERT_ORIGIN_X; + ATTRIBUTE_NAMES[488] = ATTR_VERT_ORIGIN_Y; + ATTRIBUTE_NAMES[489] = ATTR_V_IDEOGRAPHIC; + ATTRIBUTE_NAMES[490] = ATTR_PRESERVEALPHA; + ATTRIBUTE_NAMES[491] = ATTR_SCRIPTMINSIZE; + ATTRIBUTE_NAMES[492] = ATTR_SPECIFICATION; + ATTRIBUTE_NAMES[493] = ATTR_XLINK_ACTUATE; + ATTRIBUTE_NAMES[494] = ATTR_XLINK_ARCROLE; + ATTRIBUTE_NAMES[495] = ATTR_ACCEPT_CHARSET; + ATTRIBUTE_NAMES[496] = ATTR_ALIGNMENTSCOPE; + ATTRIBUTE_NAMES[497] = ATTR_ARIA_MULTILINE; + ATTRIBUTE_NAMES[498] = ATTR_BASELINE_SHIFT; + ATTRIBUTE_NAMES[499] = ATTR_HORIZ_ORIGIN_X; + ATTRIBUTE_NAMES[500] = ATTR_HORIZ_ORIGIN_Y; + ATTRIBUTE_NAMES[501] = ATTR_ONBEFOREUPDATE; + ATTRIBUTE_NAMES[502] = ATTR_ONFILTERCHANGE; + ATTRIBUTE_NAMES[503] = ATTR_ONROWSINSERTED; + ATTRIBUTE_NAMES[504] = ATTR_ONBEFOREUNLOAD; + ATTRIBUTE_NAMES[505] = ATTR_MATHBACKGROUND; + ATTRIBUTE_NAMES[506] = ATTR_LETTER_SPACING; + ATTRIBUTE_NAMES[507] = ATTR_LIGHTING_COLOR; + ATTRIBUTE_NAMES[508] = ATTR_THICKMATHSPACE; + ATTRIBUTE_NAMES[509] = ATTR_TEXT_RENDERING; + ATTRIBUTE_NAMES[510] = ATTR_V_MATHEMATICAL; + ATTRIBUTE_NAMES[511] = ATTR_POINTER_EVENTS; + ATTRIBUTE_NAMES[512] = ATTR_PRIMITIVEUNITS; + ATTRIBUTE_NAMES[513] = ATTR_SYSTEMLANGUAGE; + ATTRIBUTE_NAMES[514] = ATTR_STROKE_LINECAP; + ATTRIBUTE_NAMES[515] = ATTR_SUBSCRIPTSHIFT; + ATTRIBUTE_NAMES[516] = ATTR_STROKE_OPACITY; + ATTRIBUTE_NAMES[517] = ATTR_ARIA_DROPEFFECT; + ATTRIBUTE_NAMES[518] = ATTR_ARIA_LABELLEDBY; + ATTRIBUTE_NAMES[519] = ATTR_ARIA_TEMPLATEID; + ATTRIBUTE_NAMES[520] = ATTR_COLOR_RENDERING; + ATTRIBUTE_NAMES[521] = ATTR_CONTENTEDITABLE; + ATTRIBUTE_NAMES[522] = ATTR_DIFFUSECONSTANT; + ATTRIBUTE_NAMES[523] = ATTR_ONDATAAVAILABLE; + ATTRIBUTE_NAMES[524] = ATTR_ONCONTROLSELECT; + ATTRIBUTE_NAMES[525] = ATTR_IMAGE_RENDERING; + ATTRIBUTE_NAMES[526] = ATTR_MEDIUMMATHSPACE; + ATTRIBUTE_NAMES[527] = ATTR_TEXT_DECORATION; + ATTRIBUTE_NAMES[528] = ATTR_SHAPE_RENDERING; + ATTRIBUTE_NAMES[529] = ATTR_STROKE_LINEJOIN; + ATTRIBUTE_NAMES[530] = ATTR_REPEAT_TEMPLATE; + ATTRIBUTE_NAMES[531] = ATTR_ARIA_DESCRIBEDBY; + ATTRIBUTE_NAMES[532] = ATTR_CONTENTSTYLETYPE; + ATTRIBUTE_NAMES[533] = ATTR_FONT_SIZE_ADJUST; + ATTRIBUTE_NAMES[534] = ATTR_KERNELUNITLENGTH; + ATTRIBUTE_NAMES[535] = ATTR_ONBEFOREACTIVATE; + ATTRIBUTE_NAMES[536] = ATTR_ONPROPERTYCHANGE; + ATTRIBUTE_NAMES[537] = ATTR_ONDATASETCHANGED; + ATTRIBUTE_NAMES[538] = ATTR_MASKCONTENTUNITS; + ATTRIBUTE_NAMES[539] = ATTR_PATTERNTRANSFORM; + ATTRIBUTE_NAMES[540] = ATTR_REQUIREDFEATURES; + ATTRIBUTE_NAMES[541] = ATTR_RENDERING_INTENT; + ATTRIBUTE_NAMES[542] = ATTR_SPECULAREXPONENT; + ATTRIBUTE_NAMES[543] = ATTR_SPECULARCONSTANT; + ATTRIBUTE_NAMES[544] = ATTR_SUPERSCRIPTSHIFT; + ATTRIBUTE_NAMES[545] = ATTR_STROKE_DASHARRAY; + ATTRIBUTE_NAMES[546] = ATTR_XCHANNELSELECTOR; + ATTRIBUTE_NAMES[547] = ATTR_YCHANNELSELECTOR; + ATTRIBUTE_NAMES[548] = ATTR_ARIA_AUTOCOMPLETE; + ATTRIBUTE_NAMES[549] = ATTR_CONTENTSCRIPTTYPE; + ATTRIBUTE_NAMES[550] = ATTR_ENABLE_BACKGROUND; + ATTRIBUTE_NAMES[551] = ATTR_DOMINANT_BASELINE; + ATTRIBUTE_NAMES[552] = ATTR_GRADIENTTRANSFORM; + ATTRIBUTE_NAMES[553] = ATTR_ONBEFORDEACTIVATE; + ATTRIBUTE_NAMES[554] = ATTR_ONDATASETCOMPLETE; + ATTRIBUTE_NAMES[555] = ATTR_OVERLINE_POSITION; + ATTRIBUTE_NAMES[556] = ATTR_ONBEFOREEDITFOCUS; + ATTRIBUTE_NAMES[557] = ATTR_LIMITINGCONEANGLE; + ATTRIBUTE_NAMES[558] = ATTR_VERYTHINMATHSPACE; + ATTRIBUTE_NAMES[559] = ATTR_STROKE_DASHOFFSET; + ATTRIBUTE_NAMES[560] = ATTR_STROKE_MITERLIMIT; + ATTRIBUTE_NAMES[561] = ATTR_ALIGNMENT_BASELINE; + ATTRIBUTE_NAMES[562] = ATTR_ONREADYSTATECHANGE; + ATTRIBUTE_NAMES[563] = ATTR_OVERLINE_THICKNESS; + ATTRIBUTE_NAMES[564] = ATTR_UNDERLINE_POSITION; + ATTRIBUTE_NAMES[565] = ATTR_VERYTHICKMATHSPACE; + ATTRIBUTE_NAMES[566] = ATTR_REQUIREDEXTENSIONS; + ATTRIBUTE_NAMES[567] = ATTR_COLOR_INTERPOLATION; + ATTRIBUTE_NAMES[568] = ATTR_UNDERLINE_THICKNESS; + ATTRIBUTE_NAMES[569] = ATTR_PRESERVEASPECTRATIO; + ATTRIBUTE_NAMES[570] = ATTR_PATTERNCONTENTUNITS; + ATTRIBUTE_NAMES[571] = ATTR_ARIA_MULTISELECTABLE; + ATTRIBUTE_NAMES[572] = ATTR_SCRIPTSIZEMULTIPLIER; + ATTRIBUTE_NAMES[573] = ATTR_ARIA_ACTIVEDESCENDANT; + ATTRIBUTE_NAMES[574] = ATTR_VERYVERYTHINMATHSPACE; + ATTRIBUTE_NAMES[575] = ATTR_VERYVERYTHICKMATHSPACE; + ATTRIBUTE_NAMES[576] = ATTR_STRIKETHROUGH_POSITION; + ATTRIBUTE_NAMES[577] = ATTR_STRIKETHROUGH_THICKNESS; + ATTRIBUTE_NAMES[578] = ATTR_EXTERNALRESOURCESREQUIRED; + ATTRIBUTE_NAMES[579] = ATTR_GLYPH_ORIENTATION_VERTICAL; + ATTRIBUTE_NAMES[580] = ATTR_COLOR_INTERPOLATION_FILTERS; + ATTRIBUTE_NAMES[581] = ATTR_GLYPH_ORIENTATION_HORIZONTAL; + ATTRIBUTE_HASHES = jArray((PRInt32*)ATTRIBUTE_HASHES_DATA, 582); } void nsHtml5AttributeName::releaseStatics() { delete[] ALL_NO_NS; delete[] XMLNS_NS; delete[] XML_NS; @@ -1665,16 +1667,17 @@ nsHtml5AttributeName::releaseStatics() delete ATTR_NORESIZE; delete ATTR_MANIFEST; delete ATTR_MATHSIZE; delete ATTR_MULTIPLE; delete ATTR_LONGDESC; delete ATTR_LANGUAGE; delete ATTR_TEMPLATE; delete ATTR_TABINDEX; + delete ATTR_PACKAGES; delete ATTR_READONLY; delete ATTR_SELECTED; delete ATTR_ROWLINES; delete ATTR_SEAMLESS; delete ATTR_ROWALIGN; delete ATTR_STRETCHY; delete ATTR_REQUIRED; delete ATTR_XML_BASE; diff --git a/parser/html/nsHtml5AttributeName.h b/parser/html/nsHtml5AttributeName.h --- a/parser/html/nsHtml5AttributeName.h +++ b/parser/html/nsHtml5AttributeName.h @@ -356,16 +356,17 @@ class nsHtml5AttributeName static nsHtml5AttributeName* ATTR_NORESIZE; static nsHtml5AttributeName* ATTR_MANIFEST; static nsHtml5AttributeName* ATTR_MATHSIZE; static nsHtml5AttributeName* ATTR_MULTIPLE; static nsHtml5AttributeName* ATTR_LONGDESC; static nsHtml5AttributeName* ATTR_LANGUAGE; static nsHtml5AttributeName* ATTR_TEMPLATE; static nsHtml5AttributeName* ATTR_TABINDEX; + static nsHtml5AttributeName* ATTR_PACKAGES; static nsHtml5AttributeName* ATTR_READONLY; static nsHtml5AttributeName* ATTR_SELECTED; static nsHtml5AttributeName* ATTR_ROWLINES; static nsHtml5AttributeName* ATTR_SEAMLESS; static nsHtml5AttributeName* ATTR_ROWALIGN; static nsHtml5AttributeName* ATTR_STRETCHY; static nsHtml5AttributeName* ATTR_REQUIRED; static nsHtml5AttributeName* ATTR_XML_BASE; @@ -954,16 +955,17 @@ nsHtml5AttributeName* nsHtml5AttributeNa nsHtml5AttributeName* nsHtml5AttributeName::ATTR_NORESIZE = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_MANIFEST = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_MATHSIZE = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_MULTIPLE = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_LONGDESC = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_LANGUAGE = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_TEMPLATE = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_TABINDEX = nsnull; +nsHtml5AttributeName* nsHtml5AttributeName::ATTR_PACKAGES = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_READONLY = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_SELECTED = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_ROWLINES = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_SEAMLESS = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_ROWALIGN = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_STRETCHY = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_REQUIRED = nsnull; nsHtml5AttributeName* nsHtml5AttributeName::ATTR_XML_BASE = nsnull; diff --git a/parser/html/nsHtml5SpeculativeLoad.cpp b/parser/html/nsHtml5SpeculativeLoad.cpp --- a/parser/html/nsHtml5SpeculativeLoad.cpp +++ b/parser/html/nsHtml5SpeculativeLoad.cpp @@ -61,16 +61,19 @@ nsHtml5SpeculativeLoad::Perform(nsHtml5T aExecutor->PreloadImage(mUrl); break; case eSpeculativeLoadScript: aExecutor->PreloadScript(mUrl, mCharset, mType); break; case eSpeculativeLoadStyle: aExecutor->PreloadStyle(mUrl, mCharset); break; - case eSpeculativeLoadManifest: + case eSpeculativeLoadManifest: aExecutor->ProcessOfflineManifest(mUrl); break; + case eSpeculativeLoadPackages: + aExecutor->ProcessResourcePackages(mPackages); + break; default: NS_NOTREACHED("Bogus speculative load."); break; } } diff --git a/parser/html/nsHtml5SpeculativeLoad.h b/parser/html/nsHtml5SpeculativeLoad.h --- a/parser/html/nsHtml5SpeculativeLoad.h +++ b/parser/html/nsHtml5SpeculativeLoad.h @@ -44,17 +44,18 @@ class nsHtml5TreeOpExecutor; enum eHtml5SpeculativeLoad { #ifdef DEBUG eSpeculativeLoadUninitialized, #endif eSpeculativeLoadImage, eSpeculativeLoadScript, eSpeculativeLoadStyle, - eSpeculativeLoadManifest + eSpeculativeLoadManifest, + eSpeculativeLoadPackages }; class nsHtml5SpeculativeLoad { public: nsHtml5SpeculativeLoad(); ~nsHtml5SpeculativeLoad(); inline void InitImage(const nsAString& aUrl) { @@ -96,18 +97,31 @@ class nsHtml5SpeculativeLoad { */ inline void InitManifest(const nsAString& aUrl) { NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized, "Trying to reinitialize a speculative load!"); mOpCode = eSpeculativeLoadManifest; mUrl.Assign(aUrl); } + /** + * "Speculatively" specifying the |packages| attribute on the + * element isn't actually speculative, for the same reason that + * speculative manifest loads aren't actually speculative. + */ + inline void InitPackages(const nsAString& aPackages) { + NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized, + "Trying to reinitialize a speculative load!"); + mOpCode = eSpeculativeLoadPackages; + mPackages.Assign(aPackages); + } + void Perform(nsHtml5TreeOpExecutor* aExecutor); private: eHtml5SpeculativeLoad mOpCode; nsString mUrl; + nsString mPackages; nsString mCharset; nsString mType; }; #endif // nsHtml5SpeculativeLoad_h_ diff --git a/parser/html/nsHtml5TreeBuilderCppSupplement.h b/parser/html/nsHtml5TreeBuilderCppSupplement.h --- a/parser/html/nsHtml5TreeBuilderCppSupplement.h +++ b/parser/html/nsHtml5TreeBuilderCppSupplement.h @@ -140,16 +140,21 @@ nsHtml5TreeBuilder::createElement(PRInt3 if (url) { mSpeculativeLoadQueue.AppendElement()->InitImage(*url); } } else if (nsHtml5Atoms::style == aName) { nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement(); NS_ASSERTION(treeOp, "Tree op allocation failed."); treeOp->Init(eTreeOpSetStyleLineNumber, content, tokenizer->getLineNumber()); } else if (nsHtml5Atoms::html == aName) { + nsString* packages = aAttributes->getValue(nsHtml5AttributeName::ATTR_PACKAGES); + if (packages) { + mSpeculativeLoadQueue.AppendElement()->InitPackages(*packages); + } + nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_MANIFEST); if (url) { mSpeculativeLoadQueue.AppendElement()->InitManifest(*url); } } break; case kNameSpaceID_SVG: if (nsHtml5Atoms::image == aName) {