gecko-dev/dom/base/WebSocket.cpp
Birunthan Mohanathas 554eff3a21 Bug 946065 - Part 12: Move content/base/ to dom/ and flatten subdirectories. r=peterv
--HG--
rename : content/base/src/Attr.cpp => dom/base/Attr.cpp
rename : content/base/src/Attr.h => dom/base/Attr.h
rename : content/base/src/AutocompleteFieldList.h => dom/base/AutocompleteFieldList.h
rename : content/base/public/BlobSet.h => dom/base/BlobSet.h
rename : content/base/public/CORSMode.h => dom/base/CORSMode.h
rename : content/base/src/ChildIterator.cpp => dom/base/ChildIterator.cpp
rename : content/base/src/ChildIterator.h => dom/base/ChildIterator.h
rename : content/base/src/Comment.cpp => dom/base/Comment.cpp
rename : content/base/src/Comment.h => dom/base/Comment.h
rename : content/base/src/DOMImplementation.cpp => dom/base/DOMImplementation.cpp
rename : content/base/src/DOMImplementation.h => dom/base/DOMImplementation.h
rename : content/base/src/DOMMatrix.cpp => dom/base/DOMMatrix.cpp
rename : content/base/src/DOMMatrix.h => dom/base/DOMMatrix.h
rename : content/base/src/DOMParser.cpp => dom/base/DOMParser.cpp
rename : content/base/src/DOMParser.h => dom/base/DOMParser.h
rename : content/base/src/DOMPoint.cpp => dom/base/DOMPoint.cpp
rename : content/base/src/DOMPoint.h => dom/base/DOMPoint.h
rename : content/base/src/DOMQuad.cpp => dom/base/DOMQuad.cpp
rename : content/base/src/DOMQuad.h => dom/base/DOMQuad.h
rename : content/base/src/DOMRect.cpp => dom/base/DOMRect.cpp
rename : content/base/src/DOMRect.h => dom/base/DOMRect.h
rename : content/base/src/DOMStringList.cpp => dom/base/DOMStringList.cpp
rename : content/base/src/DOMStringList.h => dom/base/DOMStringList.h
rename : content/base/src/DirectionalityUtils.cpp => dom/base/DirectionalityUtils.cpp
rename : content/base/public/DirectionalityUtils.h => dom/base/DirectionalityUtils.h
rename : content/base/src/DocumentFragment.cpp => dom/base/DocumentFragment.cpp
rename : content/base/src/DocumentFragment.h => dom/base/DocumentFragment.h
rename : content/base/src/DocumentType.cpp => dom/base/DocumentType.cpp
rename : content/base/src/DocumentType.h => dom/base/DocumentType.h
rename : content/base/src/Element.cpp => dom/base/Element.cpp
rename : content/base/public/Element.h => dom/base/Element.h
rename : content/base/public/ElementInlines.h => dom/base/ElementInlines.h
rename : content/base/src/EventSource.cpp => dom/base/EventSource.cpp
rename : content/base/src/EventSource.h => dom/base/EventSource.h
rename : content/base/src/FeedWriterEnabled.h => dom/base/FeedWriterEnabled.h
rename : content/base/src/File.cpp => dom/base/File.cpp
rename : content/base/public/File.h => dom/base/File.h
rename : content/base/src/FileIOObject.cpp => dom/base/FileIOObject.cpp
rename : content/base/src/FileIOObject.h => dom/base/FileIOObject.h
rename : content/base/src/FragmentOrElement.cpp => dom/base/FragmentOrElement.cpp
rename : content/base/public/FragmentOrElement.h => dom/base/FragmentOrElement.h
rename : content/base/public/FromParser.h => dom/base/FromParser.h
rename : content/base/public/HTMLSplitOnSpacesTokenizer.h => dom/base/HTMLSplitOnSpacesTokenizer.h
rename : content/base/src/ImportManager.cpp => dom/base/ImportManager.cpp
rename : content/base/src/ImportManager.h => dom/base/ImportManager.h
rename : content/base/src/Link.cpp => dom/base/Link.cpp
rename : content/base/src/Link.h => dom/base/Link.h
rename : content/base/src/MultipartFileImpl.cpp => dom/base/MultipartFileImpl.cpp
rename : content/base/src/MultipartFileImpl.h => dom/base/MultipartFileImpl.h
rename : content/base/src/NodeIterator.cpp => dom/base/NodeIterator.cpp
rename : content/base/src/NodeIterator.h => dom/base/NodeIterator.h
rename : content/base/src/ResponsiveImageSelector.cpp => dom/base/ResponsiveImageSelector.cpp
rename : content/base/src/ResponsiveImageSelector.h => dom/base/ResponsiveImageSelector.h
rename : content/base/src/ShadowRoot.cpp => dom/base/ShadowRoot.cpp
rename : content/base/src/ShadowRoot.h => dom/base/ShadowRoot.h
rename : content/base/src/StyleSheetList.cpp => dom/base/StyleSheetList.cpp
rename : content/base/src/StyleSheetList.h => dom/base/StyleSheetList.h
rename : content/base/src/Text.cpp => dom/base/Text.cpp
rename : content/base/src/Text.h => dom/base/Text.h
rename : content/base/src/ThirdPartyUtil.cpp => dom/base/ThirdPartyUtil.cpp
rename : content/base/src/ThirdPartyUtil.h => dom/base/ThirdPartyUtil.h
rename : content/base/src/TreeWalker.cpp => dom/base/TreeWalker.cpp
rename : content/base/src/TreeWalker.h => dom/base/TreeWalker.h
rename : content/base/src/WebSocket.cpp => dom/base/WebSocket.cpp
rename : content/base/src/WebSocket.h => dom/base/WebSocket.h
rename : content/base/src/contentAreaDropListener.js => dom/base/contentAreaDropListener.js
rename : content/base/src/contentAreaDropListener.manifest => dom/base/contentAreaDropListener.manifest
rename : content/base/crashtests/1024428-1.html => dom/base/crashtests/1024428-1.html
rename : content/base/crashtests/1026714.html => dom/base/crashtests/1026714.html
rename : content/base/crashtests/1027461-1.html => dom/base/crashtests/1027461-1.html
rename : content/base/crashtests/1027461-inner.xul => dom/base/crashtests/1027461-inner.xul
rename : content/base/crashtests/116848-1.html => dom/base/crashtests/116848-1.html
rename : content/base/crashtests/149320-1.html => dom/base/crashtests/149320-1.html
rename : content/base/crashtests/205225-1.html => dom/base/crashtests/205225-1.html
rename : content/base/crashtests/231475-1.html => dom/base/crashtests/231475-1.html
rename : content/base/crashtests/293388-1.html => dom/base/crashtests/293388-1.html
rename : content/base/crashtests/308120-1.xul => dom/base/crashtests/308120-1.xul
rename : content/base/crashtests/324871-1.html => dom/base/crashtests/324871-1.html
rename : content/base/crashtests/325730-1.html => dom/base/crashtests/325730-1.html
rename : content/base/crashtests/326618-1.html => dom/base/crashtests/326618-1.html
rename : content/base/crashtests/326646-1.html => dom/base/crashtests/326646-1.html
rename : content/base/crashtests/326778-1.xul => dom/base/crashtests/326778-1.xul
rename : content/base/crashtests/326865-1.html => dom/base/crashtests/326865-1.html
rename : content/base/crashtests/327694.html => dom/base/crashtests/327694.html
rename : content/base/crashtests/330925-1.xhtml => dom/base/crashtests/330925-1.xhtml
rename : content/base/crashtests/336381-1.xhtml => dom/base/crashtests/336381-1.xhtml
rename : content/base/crashtests/336715-1.xhtml => dom/base/crashtests/336715-1.xhtml
rename : content/base/crashtests/338391-1.xhtml => dom/base/crashtests/338391-1.xhtml
rename : content/base/crashtests/340733-1.html => dom/base/crashtests/340733-1.html
rename : content/base/crashtests/343730-1.xhtml => dom/base/crashtests/343730-1.xhtml
rename : content/base/crashtests/343850-1.xhtml => dom/base/crashtests/343850-1.xhtml
rename : content/base/crashtests/343889-1.html => dom/base/crashtests/343889-1.html
rename : content/base/crashtests/344434-1.xhtml => dom/base/crashtests/344434-1.xhtml
rename : content/base/crashtests/344882-1.html => dom/base/crashtests/344882-1.html
rename : content/base/crashtests/345837-1.xhtml => dom/base/crashtests/345837-1.xhtml
rename : content/base/crashtests/348049-1.xhtml => dom/base/crashtests/348049-1.xhtml
rename : content/base/crashtests/349355-1.html => dom/base/crashtests/349355-1.html
rename : content/base/crashtests/354645-1.xul => dom/base/crashtests/354645-1.xul
rename : content/base/crashtests/360599-1.html => dom/base/crashtests/360599-1.html
rename : content/base/crashtests/366200-1.xhtml => dom/base/crashtests/366200-1.xhtml
rename : content/base/crashtests/371466-1.xhtml => dom/base/crashtests/371466-1.xhtml
rename : content/base/crashtests/377360-1.xhtml => dom/base/crashtests/377360-1.xhtml
rename : content/base/crashtests/377960-1.html => dom/base/crashtests/377960-1.html
rename : content/base/crashtests/377960-2.html => dom/base/crashtests/377960-2.html
rename : content/base/crashtests/384663-1-inner.xul => dom/base/crashtests/384663-1-inner.xul
rename : content/base/crashtests/384663-1.html => dom/base/crashtests/384663-1.html
rename : content/base/crashtests/386000-1.html => dom/base/crashtests/386000-1.html
rename : content/base/crashtests/386794-1.html => dom/base/crashtests/386794-1.html
rename : content/base/crashtests/387460-1-inner.xhtml => dom/base/crashtests/387460-1-inner.xhtml
rename : content/base/crashtests/387460-1.html => dom/base/crashtests/387460-1.html
rename : content/base/crashtests/395469-1.xhtml => dom/base/crashtests/395469-1.xhtml
rename : content/base/crashtests/395469-2.xhtml => dom/base/crashtests/395469-2.xhtml
rename : content/base/crashtests/398088-1.xul => dom/base/crashtests/398088-1.xul
rename : content/base/crashtests/399712-1.html => dom/base/crashtests/399712-1.html
rename : content/base/crashtests/400763-1.html => dom/base/crashtests/400763-1.html
rename : content/base/crashtests/401993-1.html => dom/base/crashtests/401993-1.html
rename : content/base/crashtests/401993-1.xml => dom/base/crashtests/401993-1.xml
rename : content/base/crashtests/407818.html => dom/base/crashtests/407818.html
rename : content/base/crashtests/410860-1.xml => dom/base/crashtests/410860-1.xml
rename : content/base/crashtests/411882-1.xhtml => dom/base/crashtests/411882-1.xhtml
rename : content/base/crashtests/416734-1.html => dom/base/crashtests/416734-1.html
rename : content/base/crashtests/418928-1.html => dom/base/crashtests/418928-1.html
rename : content/base/crashtests/420620-1.html => dom/base/crashtests/420620-1.html
rename : content/base/crashtests/424276-1.html => dom/base/crashtests/424276-1.html
rename : content/base/crashtests/426987-1.html => dom/base/crashtests/426987-1.html
rename : content/base/crashtests/43040-1.html => dom/base/crashtests/43040-1.html
rename : content/base/crashtests/443538-1.svg => dom/base/crashtests/443538-1.svg
rename : content/base/crashtests/448615-1.html => dom/base/crashtests/448615-1.html
rename : content/base/crashtests/450383-1.html => dom/base/crashtests/450383-1.html
rename : content/base/crashtests/450385-1.html => dom/base/crashtests/450385-1.html
rename : content/base/crashtests/458637-1-inner.xhtml => dom/base/crashtests/458637-1-inner.xhtml
rename : content/base/crashtests/458637-1.html => dom/base/crashtests/458637-1.html
rename : content/base/crashtests/467392.html => dom/base/crashtests/467392.html
rename : content/base/crashtests/472593-1.html => dom/base/crashtests/472593-1.html
rename : content/base/crashtests/474041-1.svg => dom/base/crashtests/474041-1.svg
rename : content/base/crashtests/483818-1.html => dom/base/crashtests/483818-1.html
rename : content/base/crashtests/490760-1.xhtml => dom/base/crashtests/490760-1.xhtml
rename : content/base/crashtests/493281-1.html => dom/base/crashtests/493281-1.html
rename : content/base/crashtests/493281-2.html => dom/base/crashtests/493281-2.html
rename : content/base/crashtests/494810-1.html => dom/base/crashtests/494810-1.html
rename : content/base/crashtests/509536-1.html => dom/base/crashtests/509536-1.html
rename : content/base/crashtests/522516-1.html => dom/base/crashtests/522516-1.html
rename : content/base/crashtests/529670.html => dom/base/crashtests/529670.html
rename : content/base/crashtests/535926-1.html => dom/base/crashtests/535926-1.html
rename : content/base/crashtests/543645.html => dom/base/crashtests/543645.html
rename : content/base/crashtests/551631-1.html => dom/base/crashtests/551631-1.html
rename : content/base/crashtests/552651.html => dom/base/crashtests/552651.html
rename : content/base/crashtests/552651.xml => dom/base/crashtests/552651.xml
rename : content/base/crashtests/554230-1.xhtml => dom/base/crashtests/554230-1.xhtml
rename : content/base/crashtests/558973.html => dom/base/crashtests/558973.html
rename : content/base/crashtests/561981-1-iframe.xhtml => dom/base/crashtests/561981-1-iframe.xhtml
rename : content/base/crashtests/561981-1.html => dom/base/crashtests/561981-1.html
rename : content/base/crashtests/561981-2-iframe.xhtml => dom/base/crashtests/561981-2-iframe.xhtml
rename : content/base/crashtests/561981-2.html => dom/base/crashtests/561981-2.html
rename : content/base/crashtests/564079-1.html => dom/base/crashtests/564079-1.html
rename : content/base/crashtests/564114.html => dom/base/crashtests/564114.html
rename : content/base/crashtests/565125-1.html => dom/base/crashtests/565125-1.html
rename : content/base/crashtests/575462.svg => dom/base/crashtests/575462.svg
rename : content/base/crashtests/582601.html => dom/base/crashtests/582601.html
rename : content/base/crashtests/590395-1.html => dom/base/crashtests/590395-1.html
rename : content/base/crashtests/593302-1.html => dom/base/crashtests/593302-1.html
rename : content/base/crashtests/593302-2.html => dom/base/crashtests/593302-2.html
rename : content/base/crashtests/595606-1.html => dom/base/crashtests/595606-1.html
rename : content/base/crashtests/595606-2.html => dom/base/crashtests/595606-2.html
rename : content/base/crashtests/604262-1.html => dom/base/crashtests/604262-1.html
rename : content/base/crashtests/605672-1.svg => dom/base/crashtests/605672-1.svg
rename : content/base/crashtests/606729-1.html => dom/base/crashtests/606729-1.html
rename : content/base/crashtests/610571-1.html => dom/base/crashtests/610571-1.html
rename : content/base/crashtests/628599-1.html => dom/base/crashtests/628599-1.html
rename : content/base/crashtests/637214-1.svg => dom/base/crashtests/637214-1.svg
rename : content/base/crashtests/637214-2.svg => dom/base/crashtests/637214-2.svg
rename : content/base/crashtests/642022-1.html => dom/base/crashtests/642022-1.html
rename : content/base/crashtests/646184.html => dom/base/crashtests/646184.html
rename : content/base/crashtests/658845-1.svg => dom/base/crashtests/658845-1.svg
rename : content/base/crashtests/667336-1.html => dom/base/crashtests/667336-1.html
rename : content/base/crashtests/679459.html => dom/base/crashtests/679459.html
rename : content/base/crashtests/679689-1.html => dom/base/crashtests/679689-1.html
rename : content/base/crashtests/682463.html => dom/base/crashtests/682463.html
rename : content/base/crashtests/693212.xhtml => dom/base/crashtests/693212.xhtml
rename : content/base/crashtests/698974-1.html => dom/base/crashtests/698974-1.html
rename : content/base/crashtests/700090-1.html => dom/base/crashtests/700090-1.html
rename : content/base/crashtests/700090-2.html => dom/base/crashtests/700090-2.html
rename : content/base/crashtests/700512-worker.js => dom/base/crashtests/700512-worker.js
rename : content/base/crashtests/700512.html => dom/base/crashtests/700512.html
rename : content/base/crashtests/709384.html => dom/base/crashtests/709384.html
rename : content/base/crashtests/709954.html => dom/base/crashtests/709954.html
rename : content/base/crashtests/713417-2.html => dom/base/crashtests/713417-2.html
rename : content/base/crashtests/713417.html => dom/base/crashtests/713417.html
rename : content/base/crashtests/715056.html => dom/base/crashtests/715056.html
rename : content/base/crashtests/741163-1.html => dom/base/crashtests/741163-1.html
rename : content/base/crashtests/752226-1.html => dom/base/crashtests/752226-1.html
rename : content/base/crashtests/752226-2.html => dom/base/crashtests/752226-2.html
rename : content/base/crashtests/766426.html => dom/base/crashtests/766426.html
rename : content/base/crashtests/771639.html => dom/base/crashtests/771639.html
rename : content/base/crashtests/786854.html => dom/base/crashtests/786854.html
rename : content/base/crashtests/815043.html => dom/base/crashtests/815043.html
rename : content/base/crashtests/815276.html => dom/base/crashtests/815276.html
rename : content/base/crashtests/815477.html => dom/base/crashtests/815477.html
rename : content/base/crashtests/815500.html => dom/base/crashtests/815500.html
rename : content/base/crashtests/816253.html => dom/base/crashtests/816253.html
rename : content/base/crashtests/819014.html => dom/base/crashtests/819014.html
rename : content/base/crashtests/822691.html => dom/base/crashtests/822691.html
rename : content/base/crashtests/822723.html => dom/base/crashtests/822723.html
rename : content/base/crashtests/824719.html => dom/base/crashtests/824719.html
rename : content/base/crashtests/827190.html => dom/base/crashtests/827190.html
rename : content/base/crashtests/828054.html => dom/base/crashtests/828054.html
rename : content/base/crashtests/828903-iframe.html => dom/base/crashtests/828903-iframe.html
rename : content/base/crashtests/828903.html => dom/base/crashtests/828903.html
rename : content/base/crashtests/829428.html => dom/base/crashtests/829428.html
rename : content/base/crashtests/830098.html => dom/base/crashtests/830098.html
rename : content/base/crashtests/831287.html => dom/base/crashtests/831287.html
rename : content/base/crashtests/832644.html => dom/base/crashtests/832644.html
rename : content/base/crashtests/836890.html => dom/base/crashtests/836890.html
rename : content/base/crashtests/838489-1.html => dom/base/crashtests/838489-1.html
rename : content/base/crashtests/838489-2.html => dom/base/crashtests/838489-2.html
rename : content/base/crashtests/841205.html => dom/base/crashtests/841205.html
rename : content/base/crashtests/844404.html => dom/base/crashtests/844404.html
rename : content/base/crashtests/845093-1.html => dom/base/crashtests/845093-1.html
rename : content/base/crashtests/845093-2.html => dom/base/crashtests/845093-2.html
rename : content/base/crashtests/847127.html => dom/base/crashtests/847127.html
rename : content/base/crashtests/849601.html => dom/base/crashtests/849601.html
rename : content/base/crashtests/849727.html => dom/base/crashtests/849727.html
rename : content/base/crashtests/849732.html => dom/base/crashtests/849732.html
rename : content/base/crashtests/851353-1.html => dom/base/crashtests/851353-1.html
rename : content/base/crashtests/863950.html => dom/base/crashtests/863950.html
rename : content/base/crashtests/864448.html => dom/base/crashtests/864448.html
rename : content/base/crashtests/930250.html => dom/base/crashtests/930250.html
rename : content/base/crashtests/942979.html => dom/base/crashtests/942979.html
rename : content/base/crashtests/978646.html => dom/base/crashtests/978646.html
rename : content/base/crashtests/xhr_abortinprogress.html => dom/base/crashtests/xhr_abortinprogress.html
rename : content/base/crashtests/xhr_empty_datauri.html => dom/base/crashtests/xhr_empty_datauri.html
rename : content/base/crashtests/xhr_html_nullresponse.html => dom/base/crashtests/xhr_html_nullresponse.html
rename : content/base/src/messageWakeupService.js => dom/base/messageWakeupService.js
rename : content/base/src/messageWakeupService.manifest => dom/base/messageWakeupService.manifest
rename : content/base/src/mozAutoDocUpdate.h => dom/base/mozAutoDocUpdate.h
rename : content/base/public/mozFlushType.h => dom/base/mozFlushType.h
rename : content/base/src/nsAtomListUtils.cpp => dom/base/nsAtomListUtils.cpp
rename : content/base/src/nsAtomListUtils.h => dom/base/nsAtomListUtils.h
rename : content/base/src/nsAttrAndChildArray.cpp => dom/base/nsAttrAndChildArray.cpp
rename : content/base/src/nsAttrAndChildArray.h => dom/base/nsAttrAndChildArray.h
rename : content/base/src/nsAttrName.h => dom/base/nsAttrName.h
rename : content/base/src/nsAttrValue.cpp => dom/base/nsAttrValue.cpp
rename : content/base/src/nsAttrValue.h => dom/base/nsAttrValue.h
rename : content/base/src/nsAttrValueInlines.h => dom/base/nsAttrValueInlines.h
rename : content/base/src/nsAttrValueOrString.cpp => dom/base/nsAttrValueOrString.cpp
rename : content/base/src/nsAttrValueOrString.h => dom/base/nsAttrValueOrString.h
rename : content/base/src/nsCCUncollectableMarker.cpp => dom/base/nsCCUncollectableMarker.cpp
rename : content/base/src/nsCCUncollectableMarker.h => dom/base/nsCCUncollectableMarker.h
rename : content/base/src/nsCSPContext.cpp => dom/base/nsCSPContext.cpp
rename : content/base/src/nsCSPContext.h => dom/base/nsCSPContext.h
rename : content/base/src/nsCSPParser.cpp => dom/base/nsCSPParser.cpp
rename : content/base/src/nsCSPParser.h => dom/base/nsCSPParser.h
rename : content/base/src/nsCSPService.cpp => dom/base/nsCSPService.cpp
rename : content/base/src/nsCSPService.h => dom/base/nsCSPService.h
rename : content/base/src/nsCSPUtils.cpp => dom/base/nsCSPUtils.cpp
rename : content/base/src/nsCSPUtils.h => dom/base/nsCSPUtils.h
rename : content/base/public/nsCaseTreatment.h => dom/base/nsCaseTreatment.h
rename : content/base/src/nsContentAreaDragDrop.cpp => dom/base/nsContentAreaDragDrop.cpp
rename : content/base/src/nsContentAreaDragDrop.h => dom/base/nsContentAreaDragDrop.h
rename : content/base/public/nsContentCID.h => dom/base/nsContentCID.h
rename : content/base/public/nsContentCreatorFunctions.h => dom/base/nsContentCreatorFunctions.h
rename : content/base/src/nsContentIterator.cpp => dom/base/nsContentIterator.cpp
rename : content/base/src/nsContentList.cpp => dom/base/nsContentList.cpp
rename : content/base/src/nsContentList.h => dom/base/nsContentList.h
rename : content/base/src/nsContentListDeclarations.h => dom/base/nsContentListDeclarations.h
rename : content/base/src/nsContentPolicy.cpp => dom/base/nsContentPolicy.cpp
rename : content/base/src/nsContentPolicy.h => dom/base/nsContentPolicy.h
rename : content/base/public/nsContentPolicyUtils.h => dom/base/nsContentPolicyUtils.h
rename : content/base/src/nsContentSink.cpp => dom/base/nsContentSink.cpp
rename : content/base/src/nsContentSink.h => dom/base/nsContentSink.h
rename : content/base/public/nsContentTypeParser.h => dom/base/nsContentTypeParser.h
rename : content/base/src/nsContentUtils.cpp => dom/base/nsContentUtils.cpp
rename : content/base/public/nsContentUtils.h => dom/base/nsContentUtils.h
rename : content/base/src/nsCopySupport.cpp => dom/base/nsCopySupport.cpp
rename : content/base/public/nsCopySupport.h => dom/base/nsCopySupport.h
rename : content/base/src/nsCrossSiteListenerProxy.cpp => dom/base/nsCrossSiteListenerProxy.cpp
rename : content/base/src/nsCrossSiteListenerProxy.h => dom/base/nsCrossSiteListenerProxy.h
rename : content/base/src/nsDOMAttributeMap.cpp => dom/base/nsDOMAttributeMap.cpp
rename : content/base/src/nsDOMAttributeMap.h => dom/base/nsDOMAttributeMap.h
rename : content/base/src/nsDOMCaretPosition.cpp => dom/base/nsDOMCaretPosition.cpp
rename : content/base/src/nsDOMCaretPosition.h => dom/base/nsDOMCaretPosition.h
rename : content/base/src/nsDOMDataChannel.cpp => dom/base/nsDOMDataChannel.cpp
rename : content/base/src/nsDOMDataChannel.h => dom/base/nsDOMDataChannel.h
rename : content/base/src/nsDOMDataChannelDeclarations.h => dom/base/nsDOMDataChannelDeclarations.h
rename : content/base/src/nsDOMFileReader.cpp => dom/base/nsDOMFileReader.cpp
rename : content/base/src/nsDOMFileReader.h => dom/base/nsDOMFileReader.h
rename : content/base/src/nsDOMMutationObserver.cpp => dom/base/nsDOMMutationObserver.cpp
rename : content/base/src/nsDOMMutationObserver.h => dom/base/nsDOMMutationObserver.h
rename : content/base/src/nsDOMSerializer.cpp => dom/base/nsDOMSerializer.cpp
rename : content/base/src/nsDOMSerializer.h => dom/base/nsDOMSerializer.h
rename : content/base/src/nsDOMSettableTokenList.cpp => dom/base/nsDOMSettableTokenList.cpp
rename : content/base/src/nsDOMSettableTokenList.h => dom/base/nsDOMSettableTokenList.h
rename : content/base/src/nsDOMTokenList.cpp => dom/base/nsDOMTokenList.cpp
rename : content/base/src/nsDOMTokenList.h => dom/base/nsDOMTokenList.h
rename : content/base/src/nsDataDocumentContentPolicy.cpp => dom/base/nsDataDocumentContentPolicy.cpp
rename : content/base/src/nsDataDocumentContentPolicy.h => dom/base/nsDataDocumentContentPolicy.h
rename : content/base/public/nsDeprecatedOperationList.h => dom/base/nsDeprecatedOperationList.h
rename : content/base/public/nsDocElementCreatedNotificationRunner.h => dom/base/nsDocElementCreatedNotificationRunner.h
rename : content/base/src/nsDocument.cpp => dom/base/nsDocument.cpp
rename : content/base/src/nsDocument.h => dom/base/nsDocument.h
rename : content/base/src/nsDocumentEncoder.cpp => dom/base/nsDocumentEncoder.cpp
rename : content/base/src/nsElementFrameLoaderOwner.cpp => dom/base/nsElementFrameLoaderOwner.cpp
rename : content/base/src/nsElementFrameLoaderOwner.h => dom/base/nsElementFrameLoaderOwner.h
rename : content/base/src/nsFormData.cpp => dom/base/nsFormData.cpp
rename : content/base/src/nsFormData.h => dom/base/nsFormData.h
rename : content/base/src/nsFrameLoader.cpp => dom/base/nsFrameLoader.cpp
rename : content/base/src/nsFrameLoader.h => dom/base/nsFrameLoader.h
rename : content/base/src/nsFrameMessageManager.cpp => dom/base/nsFrameMessageManager.cpp
rename : content/base/src/nsFrameMessageManager.h => dom/base/nsFrameMessageManager.h
rename : content/base/src/nsGenConImageContent.cpp => dom/base/nsGenConImageContent.cpp
rename : content/base/src/nsGenericDOMDataNode.cpp => dom/base/nsGenericDOMDataNode.cpp
rename : content/base/src/nsGenericDOMDataNode.h => dom/base/nsGenericDOMDataNode.h
rename : content/base/src/nsGkAtomList.h => dom/base/nsGkAtomList.h
rename : content/base/src/nsGkAtoms.cpp => dom/base/nsGkAtoms.cpp
rename : content/base/src/nsGkAtoms.h => dom/base/nsGkAtoms.h
rename : content/base/src/nsHTMLContentSerializer.cpp => dom/base/nsHTMLContentSerializer.cpp
rename : content/base/src/nsHTMLContentSerializer.h => dom/base/nsHTMLContentSerializer.h
rename : content/base/src/nsHostObjectProtocolHandler.cpp => dom/base/nsHostObjectProtocolHandler.cpp
rename : content/base/public/nsHostObjectProtocolHandler.h => dom/base/nsHostObjectProtocolHandler.h
rename : content/base/src/nsHostObjectURI.cpp => dom/base/nsHostObjectURI.cpp
rename : content/base/src/nsHostObjectURI.h => dom/base/nsHostObjectURI.h
rename : content/base/public/nsIAttribute.h => dom/base/nsIAttribute.h
rename : content/base/public/nsIContent.h => dom/base/nsIContent.h
rename : content/base/public/nsIContentInlines.h => dom/base/nsIContentInlines.h
rename : content/base/public/nsIContentIterator.h => dom/base/nsIContentIterator.h
rename : content/base/public/nsIContentPolicy.idl => dom/base/nsIContentPolicy.idl
rename : content/base/public/nsIContentSecurityPolicy.idl => dom/base/nsIContentSecurityPolicy.idl
rename : content/base/public/nsIContentSerializer.h => dom/base/nsIContentSerializer.h
rename : content/base/public/nsIDOMDataChannel.idl => dom/base/nsIDOMDataChannel.idl
rename : content/base/public/nsIDOMFile.idl => dom/base/nsIDOMFile.idl
rename : content/base/public/nsIDOMFileList.idl => dom/base/nsIDOMFileList.idl
rename : content/base/public/nsIDOMFileReader.idl => dom/base/nsIDOMFileReader.idl
rename : content/base/public/nsIDOMFormData.idl => dom/base/nsIDOMFormData.idl
rename : content/base/public/nsIDOMParser.idl => dom/base/nsIDOMParser.idl
rename : content/base/public/nsIDOMSerializer.idl => dom/base/nsIDOMSerializer.idl
rename : content/base/public/nsIDocument.h => dom/base/nsIDocument.h
rename : content/base/public/nsIDocumentEncoder.idl => dom/base/nsIDocumentEncoder.idl
rename : content/base/public/nsIDocumentInlines.h => dom/base/nsIDocumentInlines.h
rename : content/base/public/nsIDocumentObserver.h => dom/base/nsIDocumentObserver.h
rename : content/base/public/nsIDroppedLinkHandler.idl => dom/base/nsIDroppedLinkHandler.idl
rename : content/base/public/nsIFrameLoader.idl => dom/base/nsIFrameLoader.idl
rename : content/base/public/nsIImageLoadingContent.idl => dom/base/nsIImageLoadingContent.idl
rename : content/base/public/nsIMessageManager.idl => dom/base/nsIMessageManager.idl
rename : content/base/public/nsIMutationObserver.h => dom/base/nsIMutationObserver.h
rename : content/base/src/nsINode.cpp => dom/base/nsINode.cpp
rename : content/base/public/nsINode.h => dom/base/nsINode.h
rename : content/base/public/nsINodeList.h => dom/base/nsINodeList.h
rename : content/base/public/nsIObjectLoadingContent.idl => dom/base/nsIObjectLoadingContent.idl
rename : content/base/public/nsIScriptElement.h => dom/base/nsIScriptElement.h
rename : content/base/public/nsIScriptLoaderObserver.idl => dom/base/nsIScriptLoaderObserver.idl
rename : content/base/public/nsISelection.idl => dom/base/nsISelection.idl
rename : content/base/public/nsISelectionController.idl => dom/base/nsISelectionController.idl
rename : content/base/public/nsISelectionDisplay.idl => dom/base/nsISelectionDisplay.idl
rename : content/base/public/nsISelectionListener.idl => dom/base/nsISelectionListener.idl
rename : content/base/public/nsISelectionPrivate.idl => dom/base/nsISelectionPrivate.idl
rename : content/base/public/nsIStyleSheetLinkingElement.h => dom/base/nsIStyleSheetLinkingElement.h
rename : content/base/public/nsIXMLHttpRequest.idl => dom/base/nsIXMLHttpRequest.idl
rename : content/base/src/nsImageLoadingContent.cpp => dom/base/nsImageLoadingContent.cpp
rename : content/base/src/nsImageLoadingContent.h => dom/base/nsImageLoadingContent.h
rename : content/base/src/nsInProcessTabChildGlobal.cpp => dom/base/nsInProcessTabChildGlobal.cpp
rename : content/base/src/nsInProcessTabChildGlobal.h => dom/base/nsInProcessTabChildGlobal.h
rename : content/base/src/nsLineBreaker.cpp => dom/base/nsLineBreaker.cpp
rename : content/base/public/nsLineBreaker.h => dom/base/nsLineBreaker.h
rename : content/base/src/nsMappedAttributeElement.cpp => dom/base/nsMappedAttributeElement.cpp
rename : content/base/src/nsMappedAttributeElement.h => dom/base/nsMappedAttributeElement.h
rename : content/base/src/nsMappedAttributes.cpp => dom/base/nsMappedAttributes.cpp
rename : content/base/src/nsMappedAttributes.h => dom/base/nsMappedAttributes.h
rename : content/base/src/nsMixedContentBlocker.cpp => dom/base/nsMixedContentBlocker.cpp
rename : content/base/src/nsMixedContentBlocker.h => dom/base/nsMixedContentBlocker.h
rename : content/base/src/nsNameSpaceManager.cpp => dom/base/nsNameSpaceManager.cpp
rename : content/base/public/nsNameSpaceManager.h => dom/base/nsNameSpaceManager.h
rename : content/base/src/nsNoDataProtocolContentPolicy.cpp => dom/base/nsNoDataProtocolContentPolicy.cpp
rename : content/base/src/nsNoDataProtocolContentPolicy.h => dom/base/nsNoDataProtocolContentPolicy.h
rename : content/base/src/nsNodeInfoManager.cpp => dom/base/nsNodeInfoManager.cpp
rename : content/base/src/nsNodeInfoManager.h => dom/base/nsNodeInfoManager.h
rename : content/base/src/nsNodeUtils.cpp => dom/base/nsNodeUtils.cpp
rename : content/base/src/nsNodeUtils.h => dom/base/nsNodeUtils.h
rename : content/base/src/nsObjectLoadingContent.cpp => dom/base/nsObjectLoadingContent.cpp
rename : content/base/src/nsObjectLoadingContent.h => dom/base/nsObjectLoadingContent.h
rename : content/base/src/nsPlainTextSerializer.cpp => dom/base/nsPlainTextSerializer.cpp
rename : content/base/src/nsPlainTextSerializer.h => dom/base/nsPlainTextSerializer.h
rename : content/base/src/nsPropertyTable.cpp => dom/base/nsPropertyTable.cpp
rename : content/base/src/nsPropertyTable.h => dom/base/nsPropertyTable.h
rename : content/base/src/nsRange.cpp => dom/base/nsRange.cpp
rename : content/base/src/nsRange.h => dom/base/nsRange.h
rename : content/base/src/nsReferencedElement.cpp => dom/base/nsReferencedElement.cpp
rename : content/base/public/nsReferencedElement.h => dom/base/nsReferencedElement.h
rename : content/base/src/nsSandboxFlags.h => dom/base/nsSandboxFlags.h
rename : content/base/src/nsScriptElement.cpp => dom/base/nsScriptElement.cpp
rename : content/base/src/nsScriptElement.h => dom/base/nsScriptElement.h
rename : content/base/src/nsScriptLoader.cpp => dom/base/nsScriptLoader.cpp
rename : content/base/src/nsScriptLoader.h => dom/base/nsScriptLoader.h
rename : content/base/src/nsStubDocumentObserver.cpp => dom/base/nsStubDocumentObserver.cpp
rename : content/base/src/nsStubDocumentObserver.h => dom/base/nsStubDocumentObserver.h
rename : content/base/src/nsStubMutationObserver.cpp => dom/base/nsStubMutationObserver.cpp
rename : content/base/src/nsStubMutationObserver.h => dom/base/nsStubMutationObserver.h
rename : content/base/src/nsStyleLinkElement.cpp => dom/base/nsStyleLinkElement.cpp
rename : content/base/src/nsStyleLinkElement.h => dom/base/nsStyleLinkElement.h
rename : content/base/src/nsStyledElement.cpp => dom/base/nsStyledElement.cpp
rename : content/base/src/nsStyledElement.h => dom/base/nsStyledElement.h
rename : content/base/src/nsSyncLoadService.cpp => dom/base/nsSyncLoadService.cpp
rename : content/base/src/nsSyncLoadService.h => dom/base/nsSyncLoadService.h
rename : content/base/src/nsTextFragment.cpp => dom/base/nsTextFragment.cpp
rename : content/base/src/nsTextFragment.h => dom/base/nsTextFragment.h
rename : content/base/src/nsTextFragmentImpl.h => dom/base/nsTextFragmentImpl.h
rename : content/base/src/nsTextFragmentSSE2.cpp => dom/base/nsTextFragmentSSE2.cpp
rename : content/base/src/nsTextNode.cpp => dom/base/nsTextNode.cpp
rename : content/base/src/nsTextNode.h => dom/base/nsTextNode.h
rename : content/base/src/nsTraversal.cpp => dom/base/nsTraversal.cpp
rename : content/base/src/nsTraversal.h => dom/base/nsTraversal.h
rename : content/base/src/nsTreeSanitizer.cpp => dom/base/nsTreeSanitizer.cpp
rename : content/base/public/nsTreeSanitizer.h => dom/base/nsTreeSanitizer.h
rename : content/base/src/nsViewportInfo.cpp => dom/base/nsViewportInfo.cpp
rename : content/base/public/nsViewportInfo.h => dom/base/nsViewportInfo.h
rename : content/base/src/nsXHTMLContentSerializer.cpp => dom/base/nsXHTMLContentSerializer.cpp
rename : content/base/src/nsXHTMLContentSerializer.h => dom/base/nsXHTMLContentSerializer.h
rename : content/base/src/nsXMLContentSerializer.cpp => dom/base/nsXMLContentSerializer.cpp
rename : content/base/src/nsXMLContentSerializer.h => dom/base/nsXMLContentSerializer.h
rename : content/base/src/nsXMLHttpRequest.cpp => dom/base/nsXMLHttpRequest.cpp
rename : content/base/src/nsXMLHttpRequest.h => dom/base/nsXMLHttpRequest.h
rename : content/base/src/nsXMLNameSpaceMap.cpp => dom/base/nsXMLNameSpaceMap.cpp
rename : content/base/public/nsXMLNameSpaceMap.h => dom/base/nsXMLNameSpaceMap.h
rename : content/base/test/345339_iframe.html => dom/base/test/345339_iframe.html
rename : content/base/test/Ahem.ttf => dom/base/test/Ahem.ttf
rename : content/base/test/TestCSPParser.cpp => dom/base/test/TestCSPParser.cpp
rename : content/base/test/TestGetURL.cpp => dom/base/test/TestGetURL.cpp
rename : content/base/test/TestNativeXMLHttpRequest.cpp => dom/base/test/TestNativeXMLHttpRequest.cpp
rename : content/base/test/TestPlainTextSerializer.cpp => dom/base/test/TestPlainTextSerializer.cpp
rename : content/base/test/accesscontrol.resource => dom/base/test/accesscontrol.resource
rename : content/base/test/accesscontrol.resource^headers^ => dom/base/test/accesscontrol.resource^headers^
rename : content/base/test/badContentType.eventsource => dom/base/test/badContentType.eventsource
rename : content/base/test/badContentType.eventsource^headers^ => dom/base/test/badContentType.eventsource^headers^
rename : content/base/test/badHTTPResponseCode.eventsource => dom/base/test/badHTTPResponseCode.eventsource
rename : content/base/test/badHTTPResponseCode.eventsource^headers^ => dom/base/test/badHTTPResponseCode.eventsource^headers^
rename : content/base/test/badMessageEvent.eventsource => dom/base/test/badMessageEvent.eventsource
rename : content/base/test/badMessageEvent.eventsource^headers^ => dom/base/test/badMessageEvent.eventsource^headers^
rename : content/base/test/badMessageEvent2.eventsource => dom/base/test/badMessageEvent2.eventsource
rename : content/base/test/badMessageEvent2.eventsource^headers^ => dom/base/test/badMessageEvent2.eventsource^headers^
rename : content/base/test/browser.ini => dom/base/test/browser.ini
rename : content/base/test/browser_bug1058164.js => dom/base/test/browser_bug1058164.js
rename : content/base/test/browser_bug593387.js => dom/base/test/browser_bug593387.js
rename : content/base/test/browser_bug902350.js => dom/base/test/browser_bug902350.js
rename : content/base/test/browser_state_notifications.js => dom/base/test/browser_state_notifications.js
rename : content/base/test/bug282547.sjs => dom/base/test/bug282547.sjs
rename : content/base/test/bug298064-subframe.html => dom/base/test/bug298064-subframe.html
rename : content/base/test/bug313646.txt => dom/base/test/bug313646.txt
rename : content/base/test/bug382113_object.html => dom/base/test/bug382113_object.html
rename : content/base/test/bug419132.html => dom/base/test/bug419132.html
rename : content/base/test/bug426308-redirect.sjs => dom/base/test/bug426308-redirect.sjs
rename : content/base/test/bug435425.sjs => dom/base/test/bug435425.sjs
rename : content/base/test/bug435425_redirect.sjs => dom/base/test/bug435425_redirect.sjs
rename : content/base/test/bug444322.js => dom/base/test/bug444322.js
rename : content/base/test/bug444322.txt => dom/base/test/bug444322.txt
rename : content/base/test/bug444546.sjs => dom/base/test/bug444546.sjs
rename : content/base/test/bug455629-helper.svg => dom/base/test/bug455629-helper.svg
rename : content/base/test/bug457746.sjs => dom/base/test/bug457746.sjs
rename : content/base/test/bug461735-post-redirect.js => dom/base/test/bug461735-post-redirect.js
rename : content/base/test/bug461735-redirect1.sjs => dom/base/test/bug461735-redirect1.sjs
rename : content/base/test/bug461735-redirect2.sjs => dom/base/test/bug461735-redirect2.sjs
rename : content/base/test/bug466080.sjs => dom/base/test/bug466080.sjs
rename : content/base/test/bug466409-empty.css => dom/base/test/bug466409-empty.css
rename : content/base/test/bug466409-page.html => dom/base/test/bug466409-page.html
rename : content/base/test/bug475156.sjs => dom/base/test/bug475156.sjs
rename : content/base/test/bug482935.sjs => dom/base/test/bug482935.sjs
rename : content/base/test/bug540854.sjs => dom/base/test/bug540854.sjs
rename : content/base/test/bug578096LoadChromeScript.js => dom/base/test/bug578096LoadChromeScript.js
rename : content/base/test/bug638112-response.txt => dom/base/test/bug638112-response.txt
rename : content/base/test/bug638112.sjs => dom/base/test/bug638112.sjs
rename : content/base/test/bug682592-subframe-ref.html => dom/base/test/bug682592-subframe-ref.html
rename : content/base/test/bug682592-subframe.html => dom/base/test/bug682592-subframe.html
rename : content/base/test/bug696301-script-1.js => dom/base/test/bug696301-script-1.js
rename : content/base/test/bug696301-script-1.js^headers^ => dom/base/test/bug696301-script-1.js^headers^
rename : content/base/test/bug696301-script-2.js => dom/base/test/bug696301-script-2.js
rename : content/base/test/bug803225_test_mailto.html => dom/base/test/bug803225_test_mailto.html
rename : content/base/test/bug819051.sjs => dom/base/test/bug819051.sjs
rename : content/base/test/chrome/blockNoPlugins.xml => dom/base/test/chrome/blockNoPlugins.xml
rename : content/base/test/chrome/blockPluginHard.xml => dom/base/test/chrome/blockPluginHard.xml
rename : content/base/test/chrome/bug421622-referer.sjs => dom/base/test/chrome/bug421622-referer.sjs
rename : content/base/test/chrome/chrome.ini => dom/base/test/chrome/chrome.ini
rename : content/base/test/chrome/cpows_child.js => dom/base/test/chrome/cpows_child.js
rename : content/base/test/chrome/cpows_parent.xul => dom/base/test/chrome/cpows_parent.xul
rename : content/base/test/chrome/file_bug391728.html => dom/base/test/chrome/file_bug391728.html
rename : content/base/test/chrome/file_bug391728_2.html => dom/base/test/chrome/file_bug391728_2.html
rename : content/base/test/chrome/file_bug549682.xul => dom/base/test/chrome/file_bug549682.xul
rename : content/base/test/chrome/file_bug616841.xul => dom/base/test/chrome/file_bug616841.xul
rename : content/base/test/chrome/file_bug816340.xul => dom/base/test/chrome/file_bug816340.xul
rename : content/base/test/chrome/file_bug990812-1.xul => dom/base/test/chrome/file_bug990812-1.xul
rename : content/base/test/chrome/file_bug990812-2.xul => dom/base/test/chrome/file_bug990812-2.xul
rename : content/base/test/chrome/file_bug990812-3.xul => dom/base/test/chrome/file_bug990812-3.xul
rename : content/base/test/chrome/file_bug990812-4.xul => dom/base/test/chrome/file_bug990812-4.xul
rename : content/base/test/chrome/file_bug990812-5.xul => dom/base/test/chrome/file_bug990812-5.xul
rename : content/base/test/chrome/file_bug990812.xul => dom/base/test/chrome/file_bug990812.xul
rename : content/base/test/chrome/fileconstructor_file.png => dom/base/test/chrome/fileconstructor_file.png
rename : content/base/test/chrome/frame_bug814638.xul => dom/base/test/chrome/frame_bug814638.xul
rename : content/base/test/chrome/host_bug814638.xul => dom/base/test/chrome/host_bug814638.xul
rename : content/base/test/chrome/mochitest.ini => dom/base/test/chrome/mochitest.ini
rename : content/base/test/chrome/nochrome_bug765993.html => dom/base/test/chrome/nochrome_bug765993.html
rename : content/base/test/chrome/nochrome_bug765993.js => dom/base/test/chrome/nochrome_bug765993.js
rename : content/base/test/chrome/nochrome_bug765993.js^headers^ => dom/base/test/chrome/nochrome_bug765993.js^headers^
rename : content/base/test/chrome/test_bug1063837.xul => dom/base/test/chrome/test_bug1063837.xul
rename : content/base/test/chrome/test_bug206691.xul => dom/base/test/chrome/test_bug206691.xul
rename : content/base/test/chrome/test_bug339494.xul => dom/base/test/chrome/test_bug339494.xul
rename : content/base/test/chrome/test_bug357450.xul => dom/base/test/chrome/test_bug357450.xul
rename : content/base/test/chrome/test_bug380418.html => dom/base/test/chrome/test_bug380418.html
rename : content/base/test/chrome/test_bug380418.html^headers^ => dom/base/test/chrome/test_bug380418.html^headers^
rename : content/base/test/chrome/test_bug383430.html => dom/base/test/chrome/test_bug383430.html
rename : content/base/test/chrome/test_bug391728.html => dom/base/test/chrome/test_bug391728.html
rename : content/base/test/chrome/test_bug421622.xul => dom/base/test/chrome/test_bug421622.xul
rename : content/base/test/chrome/test_bug429785.xul => dom/base/test/chrome/test_bug429785.xul
rename : content/base/test/chrome/test_bug430050.xul => dom/base/test/chrome/test_bug430050.xul
rename : content/base/test/chrome/test_bug467123.xul => dom/base/test/chrome/test_bug467123.xul
rename : content/base/test/chrome/test_bug549682.xul => dom/base/test/chrome/test_bug549682.xul
rename : content/base/test/chrome/test_bug571390.xul => dom/base/test/chrome/test_bug571390.xul
rename : content/base/test/chrome/test_bug574596.html => dom/base/test/chrome/test_bug574596.html
rename : content/base/test/chrome/test_bug599295.html => dom/base/test/chrome/test_bug599295.html
rename : content/base/test/chrome/test_bug616841.xul => dom/base/test/chrome/test_bug616841.xul
rename : content/base/test/chrome/test_bug635835.xul => dom/base/test/chrome/test_bug635835.xul
rename : content/base/test/chrome/test_bug650776.html => dom/base/test/chrome/test_bug650776.html
rename : content/base/test/chrome/test_bug650784.html => dom/base/test/chrome/test_bug650784.html
rename : content/base/test/chrome/test_bug682305.html => dom/base/test/chrome/test_bug682305.html
rename : content/base/test/chrome/test_bug683852.xul => dom/base/test/chrome/test_bug683852.xul
rename : content/base/test/chrome/test_bug750096.html => dom/base/test/chrome/test_bug750096.html
rename : content/base/test/chrome/test_bug752226-3.xul => dom/base/test/chrome/test_bug752226-3.xul
rename : content/base/test/chrome/test_bug752226-4.xul => dom/base/test/chrome/test_bug752226-4.xul
rename : content/base/test/chrome/test_bug765993.html => dom/base/test/chrome/test_bug765993.html
rename : content/base/test/chrome/test_bug780199.xul => dom/base/test/chrome/test_bug780199.xul
rename : content/base/test/chrome/test_bug780529.xul => dom/base/test/chrome/test_bug780529.xul
rename : content/base/test/chrome/test_bug800386.xul => dom/base/test/chrome/test_bug800386.xul
rename : content/base/test/chrome/test_bug814638.xul => dom/base/test/chrome/test_bug814638.xul
rename : content/base/test/chrome/test_bug816340.xul => dom/base/test/chrome/test_bug816340.xul
rename : content/base/test/chrome/test_bug914381.html => dom/base/test/chrome/test_bug914381.html
rename : content/base/test/chrome/test_bug990812.xul => dom/base/test/chrome/test_bug990812.xul
rename : content/base/test/chrome/test_cpows.xul => dom/base/test/chrome/test_cpows.xul
rename : content/base/test/chrome/test_document_register.xul => dom/base/test/chrome/test_document_register.xul
rename : content/base/test/chrome/test_domparsing.xul => dom/base/test/chrome/test_domparsing.xul
rename : content/base/test/chrome/test_fileconstructor.xul => dom/base/test/chrome/test_fileconstructor.xul
rename : content/base/test/chrome/test_fileconstructor_tempfile.xul => dom/base/test/chrome/test_fileconstructor_tempfile.xul
rename : content/base/test/chrome/test_title.xul => dom/base/test/chrome/test_title.xul
rename : content/base/test/chrome/title_window.xul => dom/base/test/chrome/title_window.xul
rename : content/base/test/copypaste.js => dom/base/test/copypaste.js
rename : content/base/test/csp/chrome.ini => dom/base/test/csp/chrome.ini
rename : content/base/test/csp/file_CSP.css => dom/base/test/csp/file_CSP.css
rename : content/base/test/csp/file_CSP.sjs => dom/base/test/csp/file_CSP.sjs
rename : content/base/test/csp/file_CSP_bug663567.xsl => dom/base/test/csp/file_CSP_bug663567.xsl
rename : content/base/test/csp/file_CSP_bug663567_allows.xml => dom/base/test/csp/file_CSP_bug663567_allows.xml
rename : content/base/test/csp/file_CSP_bug663567_allows.xml^headers^ => dom/base/test/csp/file_CSP_bug663567_allows.xml^headers^
rename : content/base/test/csp/file_CSP_bug663567_blocks.xml => dom/base/test/csp/file_CSP_bug663567_blocks.xml
rename : content/base/test/csp/file_CSP_bug663567_blocks.xml^headers^ => dom/base/test/csp/file_CSP_bug663567_blocks.xml^headers^
rename : content/base/test/csp/file_CSP_bug802872.html => dom/base/test/csp/file_CSP_bug802872.html
rename : content/base/test/csp/file_CSP_bug802872.html^headers^ => dom/base/test/csp/file_CSP_bug802872.html^headers^
rename : content/base/test/csp/file_CSP_bug802872.js => dom/base/test/csp/file_CSP_bug802872.js
rename : content/base/test/csp/file_CSP_bug802872.sjs => dom/base/test/csp/file_CSP_bug802872.sjs
rename : content/base/test/csp/file_CSP_bug885433_allows.html => dom/base/test/csp/file_CSP_bug885433_allows.html
rename : content/base/test/csp/file_CSP_bug885433_allows.html^headers^ => dom/base/test/csp/file_CSP_bug885433_allows.html^headers^
rename : content/base/test/csp/file_CSP_bug885433_blocks.html => dom/base/test/csp/file_CSP_bug885433_blocks.html
rename : content/base/test/csp/file_CSP_bug885433_blocks.html^headers^ => dom/base/test/csp/file_CSP_bug885433_blocks.html^headers^
rename : content/base/test/csp/file_CSP_bug888172.html => dom/base/test/csp/file_CSP_bug888172.html
rename : content/base/test/csp/file_CSP_bug888172.sjs => dom/base/test/csp/file_CSP_bug888172.sjs
rename : content/base/test/csp/file_CSP_bug909029_none.html => dom/base/test/csp/file_CSP_bug909029_none.html
rename : content/base/test/csp/file_CSP_bug909029_none.html^headers^ => dom/base/test/csp/file_CSP_bug909029_none.html^headers^
rename : content/base/test/csp/file_CSP_bug909029_star.html => dom/base/test/csp/file_CSP_bug909029_star.html
rename : content/base/test/csp/file_CSP_bug909029_star.html^headers^ => dom/base/test/csp/file_CSP_bug909029_star.html^headers^
rename : content/base/test/csp/file_CSP_bug910139.sjs => dom/base/test/csp/file_CSP_bug910139.sjs
rename : content/base/test/csp/file_CSP_bug910139.xml => dom/base/test/csp/file_CSP_bug910139.xml
rename : content/base/test/csp/file_CSP_bug910139.xsl => dom/base/test/csp/file_CSP_bug910139.xsl
rename : content/base/test/csp/file_CSP_bug941404.html => dom/base/test/csp/file_CSP_bug941404.html
rename : content/base/test/csp/file_CSP_bug941404_xhr.html => dom/base/test/csp/file_CSP_bug941404_xhr.html
rename : content/base/test/csp/file_CSP_bug941404_xhr.html^headers^ => dom/base/test/csp/file_CSP_bug941404_xhr.html^headers^
rename : content/base/test/csp/file_CSP_evalscript_main.html => dom/base/test/csp/file_CSP_evalscript_main.html
rename : content/base/test/csp/file_CSP_evalscript_main.html^headers^ => dom/base/test/csp/file_CSP_evalscript_main.html^headers^
rename : content/base/test/csp/file_CSP_evalscript_main.js => dom/base/test/csp/file_CSP_evalscript_main.js
rename : content/base/test/csp/file_CSP_evalscript_main_allowed.html => dom/base/test/csp/file_CSP_evalscript_main_allowed.html
rename : content/base/test/csp/file_CSP_evalscript_main_allowed.html^headers^ => dom/base/test/csp/file_CSP_evalscript_main_allowed.html^headers^
rename : content/base/test/csp/file_CSP_evalscript_main_allowed.js => dom/base/test/csp/file_CSP_evalscript_main_allowed.js
rename : content/base/test/csp/file_CSP_frameancestors.sjs => dom/base/test/csp/file_CSP_frameancestors.sjs
rename : content/base/test/csp/file_CSP_frameancestors_main.html => dom/base/test/csp/file_CSP_frameancestors_main.html
rename : content/base/test/csp/file_CSP_frameancestors_main.js => dom/base/test/csp/file_CSP_frameancestors_main.js
rename : content/base/test/csp/file_CSP_inlinescript_main.html => dom/base/test/csp/file_CSP_inlinescript_main.html
rename : content/base/test/csp/file_CSP_inlinescript_main.html^headers^ => dom/base/test/csp/file_CSP_inlinescript_main.html^headers^
rename : content/base/test/csp/file_CSP_inlinescript_main_allowed.html => dom/base/test/csp/file_CSP_inlinescript_main_allowed.html
rename : content/base/test/csp/file_CSP_inlinescript_main_allowed.html^headers^ => dom/base/test/csp/file_CSP_inlinescript_main_allowed.html^headers^
rename : content/base/test/csp/file_CSP_inlinestyle_main.html => dom/base/test/csp/file_CSP_inlinestyle_main.html
rename : content/base/test/csp/file_CSP_inlinestyle_main.html^headers^ => dom/base/test/csp/file_CSP_inlinestyle_main.html^headers^
rename : content/base/test/csp/file_CSP_inlinestyle_main_allowed.html => dom/base/test/csp/file_CSP_inlinestyle_main_allowed.html
rename : content/base/test/csp/file_CSP_inlinestyle_main_allowed.html^headers^ => dom/base/test/csp/file_CSP_inlinestyle_main_allowed.html^headers^
rename : content/base/test/csp/file_CSP_main.html => dom/base/test/csp/file_CSP_main.html
rename : content/base/test/csp/file_CSP_main.html^headers^ => dom/base/test/csp/file_CSP_main.html^headers^
rename : content/base/test/csp/file_CSP_main.js => dom/base/test/csp/file_CSP_main.js
rename : content/base/test/csp/file_base-uri.html => dom/base/test/csp/file_base-uri.html
rename : content/base/test/csp/file_bug836922_npolicies.html => dom/base/test/csp/file_bug836922_npolicies.html
rename : content/base/test/csp/file_bug836922_npolicies.html^headers^ => dom/base/test/csp/file_bug836922_npolicies.html^headers^
rename : content/base/test/csp/file_bug836922_npolicies_ro_violation.sjs => dom/base/test/csp/file_bug836922_npolicies_ro_violation.sjs
rename : content/base/test/csp/file_bug836922_npolicies_violation.sjs => dom/base/test/csp/file_bug836922_npolicies_violation.sjs
rename : content/base/test/csp/file_bug886164.html => dom/base/test/csp/file_bug886164.html
rename : content/base/test/csp/file_bug886164.html^headers^ => dom/base/test/csp/file_bug886164.html^headers^
rename : content/base/test/csp/file_bug886164_2.html => dom/base/test/csp/file_bug886164_2.html
rename : content/base/test/csp/file_bug886164_2.html^headers^ => dom/base/test/csp/file_bug886164_2.html^headers^
rename : content/base/test/csp/file_bug886164_3.html => dom/base/test/csp/file_bug886164_3.html
rename : content/base/test/csp/file_bug886164_3.html^headers^ => dom/base/test/csp/file_bug886164_3.html^headers^
rename : content/base/test/csp/file_bug886164_4.html => dom/base/test/csp/file_bug886164_4.html
rename : content/base/test/csp/file_bug886164_4.html^headers^ => dom/base/test/csp/file_bug886164_4.html^headers^
rename : content/base/test/csp/file_bug886164_5.html => dom/base/test/csp/file_bug886164_5.html
rename : content/base/test/csp/file_bug886164_5.html^headers^ => dom/base/test/csp/file_bug886164_5.html^headers^
rename : content/base/test/csp/file_bug886164_6.html => dom/base/test/csp/file_bug886164_6.html
rename : content/base/test/csp/file_bug886164_6.html^headers^ => dom/base/test/csp/file_bug886164_6.html^headers^
rename : content/base/test/csp/file_connect-src.html => dom/base/test/csp/file_connect-src.html
rename : content/base/test/csp/file_csp_bug768029.html => dom/base/test/csp/file_csp_bug768029.html
rename : content/base/test/csp/file_csp_bug768029.sjs => dom/base/test/csp/file_csp_bug768029.sjs
rename : content/base/test/csp/file_csp_bug773891.html => dom/base/test/csp/file_csp_bug773891.html
rename : content/base/test/csp/file_csp_bug773891.sjs => dom/base/test/csp/file_csp_bug773891.sjs
rename : content/base/test/csp/file_csp_invalid_source_expression.html => dom/base/test/csp/file_csp_invalid_source_expression.html
rename : content/base/test/csp/file_csp_path_matching.html => dom/base/test/csp/file_csp_path_matching.html
rename : content/base/test/csp/file_csp_path_matching.js => dom/base/test/csp/file_csp_path_matching.js
rename : content/base/test/csp/file_csp_path_matching_redirect.html => dom/base/test/csp/file_csp_path_matching_redirect.html
rename : content/base/test/csp/file_csp_path_matching_redirect_server.sjs => dom/base/test/csp/file_csp_path_matching_redirect_server.sjs
rename : content/base/test/csp/file_csp_redirects_main.html => dom/base/test/csp/file_csp_redirects_main.html
rename : content/base/test/csp/file_csp_redirects_page.sjs => dom/base/test/csp/file_csp_redirects_page.sjs
rename : content/base/test/csp/file_csp_redirects_resource.sjs => dom/base/test/csp/file_csp_redirects_resource.sjs
rename : content/base/test/csp/file_csp_report.html => dom/base/test/csp/file_csp_report.html
rename : content/base/test/csp/file_csp_testserver.sjs => dom/base/test/csp/file_csp_testserver.sjs
rename : content/base/test/csp/file_hash_source.html => dom/base/test/csp/file_hash_source.html
rename : content/base/test/csp/file_hash_source.html^headers^ => dom/base/test/csp/file_hash_source.html^headers^
rename : content/base/test/csp/file_leading_wildcard.html => dom/base/test/csp/file_leading_wildcard.html
rename : content/base/test/csp/file_multi_policy_injection_bypass.html => dom/base/test/csp/file_multi_policy_injection_bypass.html
rename : content/base/test/csp/file_multi_policy_injection_bypass.html^headers^ => dom/base/test/csp/file_multi_policy_injection_bypass.html^headers^
rename : content/base/test/csp/file_multi_policy_injection_bypass_2.html => dom/base/test/csp/file_multi_policy_injection_bypass_2.html
rename : content/base/test/csp/file_multi_policy_injection_bypass_2.html^headers^ => dom/base/test/csp/file_multi_policy_injection_bypass_2.html^headers^
rename : content/base/test/csp/file_nonce_source.html => dom/base/test/csp/file_nonce_source.html
rename : content/base/test/csp/file_nonce_source.html^headers^ => dom/base/test/csp/file_nonce_source.html^headers^
rename : content/base/test/csp/file_policyuri_regression_from_multipolicy.html => dom/base/test/csp/file_policyuri_regression_from_multipolicy.html
rename : content/base/test/csp/file_policyuri_regression_from_multipolicy.html^headers^ => dom/base/test/csp/file_policyuri_regression_from_multipolicy.html^headers^
rename : content/base/test/csp/file_policyuri_regression_from_multipolicy_policy => dom/base/test/csp/file_policyuri_regression_from_multipolicy_policy
rename : content/base/test/csp/file_redirect_content.sjs => dom/base/test/csp/file_redirect_content.sjs
rename : content/base/test/csp/file_redirect_report.sjs => dom/base/test/csp/file_redirect_report.sjs
rename : content/base/test/csp/file_report_uri_missing_in_report_only_header.html => dom/base/test/csp/file_report_uri_missing_in_report_only_header.html
rename : content/base/test/csp/file_report_uri_missing_in_report_only_header.html^headers^ => dom/base/test/csp/file_report_uri_missing_in_report_only_header.html^headers^
rename : content/base/test/csp/file_self_none_as_hostname_confusion.html => dom/base/test/csp/file_self_none_as_hostname_confusion.html
rename : content/base/test/csp/file_self_none_as_hostname_confusion.html^headers^ => dom/base/test/csp/file_self_none_as_hostname_confusion.html^headers^
rename : content/base/test/csp/file_subframe_run_js_if_allowed.html => dom/base/test/csp/file_subframe_run_js_if_allowed.html
rename : content/base/test/csp/file_subframe_run_js_if_allowed.html^headers^ => dom/base/test/csp/file_subframe_run_js_if_allowed.html^headers^
rename : content/base/test/csp/mochitest.ini => dom/base/test/csp/mochitest.ini
rename : content/base/test/csp/test_301_redirect.html => dom/base/test/csp/test_301_redirect.html
rename : content/base/test/csp/test_302_redirect.html => dom/base/test/csp/test_302_redirect.html
rename : content/base/test/csp/test_303_redirect.html => dom/base/test/csp/test_303_redirect.html
rename : content/base/test/csp/test_307_redirect.html => dom/base/test/csp/test_307_redirect.html
rename : content/base/test/csp/test_CSP.html => dom/base/test/csp/test_CSP.html
rename : content/base/test/csp/test_CSP_bug663567.html => dom/base/test/csp/test_CSP_bug663567.html
rename : content/base/test/csp/test_CSP_bug802872.html => dom/base/test/csp/test_CSP_bug802872.html
rename : content/base/test/csp/test_CSP_bug885433.html => dom/base/test/csp/test_CSP_bug885433.html
rename : content/base/test/csp/test_CSP_bug888172.html => dom/base/test/csp/test_CSP_bug888172.html
rename : content/base/test/csp/test_CSP_bug909029.html => dom/base/test/csp/test_CSP_bug909029.html
rename : content/base/test/csp/test_CSP_bug910139.html => dom/base/test/csp/test_CSP_bug910139.html
rename : content/base/test/csp/test_CSP_bug941404.html => dom/base/test/csp/test_CSP_bug941404.html
rename : content/base/test/csp/test_CSP_evalscript.html => dom/base/test/csp/test_CSP_evalscript.html
rename : content/base/test/csp/test_CSP_frameancestors.html => dom/base/test/csp/test_CSP_frameancestors.html
rename : content/base/test/csp/test_CSP_inlinescript.html => dom/base/test/csp/test_CSP_inlinescript.html
rename : content/base/test/csp/test_CSP_inlinestyle.html => dom/base/test/csp/test_CSP_inlinestyle.html
rename : content/base/test/csp/test_base-uri.html => dom/base/test/csp/test_base-uri.html
rename : content/base/test/csp/test_bug836922_npolicies.html => dom/base/test/csp/test_bug836922_npolicies.html
rename : content/base/test/csp/test_bug886164.html => dom/base/test/csp/test_bug886164.html
rename : content/base/test/csp/test_bug949549.html => dom/base/test/csp/test_bug949549.html
rename : content/base/test/csp/test_connect-src.html => dom/base/test/csp/test_connect-src.html
rename : content/base/test/csp/test_csp_bug768029.html => dom/base/test/csp/test_csp_bug768029.html
rename : content/base/test/csp/test_csp_bug773891.html => dom/base/test/csp/test_csp_bug773891.html
rename : content/base/test/csp/test_csp_invalid_source_expression.html => dom/base/test/csp/test_csp_invalid_source_expression.html
rename : content/base/test/csp/test_csp_path_matching.html => dom/base/test/csp/test_csp_path_matching.html
rename : content/base/test/csp/test_csp_path_matching_redirect.html => dom/base/test/csp/test_csp_path_matching_redirect.html
rename : content/base/test/csp/test_csp_redirects.html => dom/base/test/csp/test_csp_redirects.html
rename : content/base/test/csp/test_csp_report.html => dom/base/test/csp/test_csp_report.html
rename : content/base/test/csp/test_hash_source.html => dom/base/test/csp/test_hash_source.html
rename : content/base/test/csp/test_leading_wildcard.html => dom/base/test/csp/test_leading_wildcard.html
rename : content/base/test/csp/test_multi_policy_injection_bypass.html => dom/base/test/csp/test_multi_policy_injection_bypass.html
rename : content/base/test/csp/test_nonce_source.html => dom/base/test/csp/test_nonce_source.html
rename : content/base/test/csp/test_policyuri_regression_from_multipolicy.html => dom/base/test/csp/test_policyuri_regression_from_multipolicy.html
rename : content/base/test/csp/test_report_uri_missing_in_report_only_header.html => dom/base/test/csp/test_report_uri_missing_in_report_only_header.html
rename : content/base/test/csp/test_self_none_as_hostname_confusion.html => dom/base/test/csp/test_self_none_as_hostname_confusion.html
rename : content/base/test/csp/test_subframe_run_js_if_allowed.html => dom/base/test/csp/test_subframe_run_js_if_allowed.html
rename : content/base/test/delayedServerEvents.sjs => dom/base/test/delayedServerEvents.sjs
rename : content/base/test/eventsource.resource => dom/base/test/eventsource.resource
rename : content/base/test/eventsource.resource^headers^ => dom/base/test/eventsource.resource^headers^
rename : content/base/test/eventsource_redirect.resource => dom/base/test/eventsource_redirect.resource
rename : content/base/test/eventsource_redirect.resource^headers^ => dom/base/test/eventsource_redirect.resource^headers^
rename : content/base/test/eventsource_redirect_to.resource => dom/base/test/eventsource_redirect_to.resource
rename : content/base/test/eventsource_redirect_to.resource^headers^ => dom/base/test/eventsource_redirect_to.resource^headers^
rename : content/base/test/fake_plugin.tst => dom/base/test/fake_plugin.tst
rename : content/base/test/file_CrossSiteXHR_cache_server.sjs => dom/base/test/file_CrossSiteXHR_cache_server.sjs
rename : content/base/test/file_CrossSiteXHR_inner.html => dom/base/test/file_CrossSiteXHR_inner.html
rename : content/base/test/file_CrossSiteXHR_inner.jar => dom/base/test/file_CrossSiteXHR_inner.jar
rename : content/base/test/file_CrossSiteXHR_inner_data.sjs => dom/base/test/file_CrossSiteXHR_inner_data.sjs
rename : content/base/test/file_CrossSiteXHR_server.sjs => dom/base/test/file_CrossSiteXHR_server.sjs
rename : content/base/test/file_XHRDocURI.html => dom/base/test/file_XHRDocURI.html
rename : content/base/test/file_XHRDocURI.html^headers^ => dom/base/test/file_XHRDocURI.html^headers^
rename : content/base/test/file_XHRDocURI.sjs => dom/base/test/file_XHRDocURI.sjs
rename : content/base/test/file_XHRDocURI.text => dom/base/test/file_XHRDocURI.text
rename : content/base/test/file_XHRDocURI.text^headers^ => dom/base/test/file_XHRDocURI.text^headers^
rename : content/base/test/file_XHRDocURI.xml => dom/base/test/file_XHRDocURI.xml
rename : content/base/test/file_XHRDocURI.xml^headers^ => dom/base/test/file_XHRDocURI.xml^headers^
rename : content/base/test/file_XHRResponseURL.js => dom/base/test/file_XHRResponseURL.js
rename : content/base/test/file_XHRResponseURL.sjs => dom/base/test/file_XHRResponseURL.sjs
rename : content/base/test/file_XHRResponseURL.text => dom/base/test/file_XHRResponseURL.text
rename : content/base/test/file_XHRResponseURL.text^headers^ => dom/base/test/file_XHRResponseURL.text^headers^
rename : content/base/test/file_XHRResponseURL_nocors.text => dom/base/test/file_XHRResponseURL_nocors.text
rename : content/base/test/file_XHRSendData.sjs => dom/base/test/file_XHRSendData.sjs
rename : content/base/test/file_XHRSendData_doc.xml => dom/base/test/file_XHRSendData_doc.xml
rename : content/base/test/file_XHRSendData_doc.xml^headers^ => dom/base/test/file_XHRSendData_doc.xml^headers^
rename : content/base/test/file_XHR_anon.sjs => dom/base/test/file_XHR_anon.sjs
rename : content/base/test/file_XHR_binary1.bin => dom/base/test/file_XHR_binary1.bin
rename : content/base/test/file_XHR_binary1.bin^headers^ => dom/base/test/file_XHR_binary1.bin^headers^
rename : content/base/test/file_XHR_binary2.bin => dom/base/test/file_XHR_binary2.bin
rename : content/base/test/file_XHR_fail1.txt => dom/base/test/file_XHR_fail1.txt
rename : content/base/test/file_XHR_fail1.txt^headers^ => dom/base/test/file_XHR_fail1.txt^headers^
rename : content/base/test/file_XHR_fail1b.txt => dom/base/test/file_XHR_fail1b.txt
rename : content/base/test/file_XHR_header.sjs => dom/base/test/file_XHR_header.sjs
rename : content/base/test/file_XHR_pass1.xml => dom/base/test/file_XHR_pass1.xml
rename : content/base/test/file_XHR_pass2.txt => dom/base/test/file_XHR_pass2.txt
rename : content/base/test/file_XHR_pass3.txt => dom/base/test/file_XHR_pass3.txt
rename : content/base/test/file_XHR_pass3.txt^headers^ => dom/base/test/file_XHR_pass3.txt^headers^
rename : content/base/test/file_XHR_system_redirect.html => dom/base/test/file_XHR_system_redirect.html
rename : content/base/test/file_XHR_system_redirect.html^headers^ => dom/base/test/file_XHR_system_redirect.html^headers^
rename : content/base/test/file_XHR_timeout.sjs => dom/base/test/file_XHR_timeout.sjs
rename : content/base/test/file_base_xbl.xml => dom/base/test/file_base_xbl.xml
rename : content/base/test/file_bug1008126_worker.js => dom/base/test/file_bug1008126_worker.js
rename : content/base/test/file_bug1011748_OK.sjs => dom/base/test/file_bug1011748_OK.sjs
rename : content/base/test/file_bug1011748_redirect.sjs => dom/base/test/file_bug1011748_redirect.sjs
rename : content/base/test/file_bug28293.sjs => dom/base/test/file_bug28293.sjs
rename : content/base/test/file_bug326337.xml => dom/base/test/file_bug326337.xml
rename : content/base/test/file_bug326337_inner.html => dom/base/test/file_bug326337_inner.html
rename : content/base/test/file_bug326337_outer.html => dom/base/test/file_bug326337_outer.html
rename : content/base/test/file_bug416317.xhtml => dom/base/test/file_bug416317.xhtml
rename : content/base/test/file_bug426646-1.html => dom/base/test/file_bug426646-1.html
rename : content/base/test/file_bug426646-2.html => dom/base/test/file_bug426646-2.html
rename : content/base/test/file_bug428847-1.xhtml => dom/base/test/file_bug428847-1.xhtml
rename : content/base/test/file_bug428847-2.xhtml => dom/base/test/file_bug428847-2.xhtml
rename : content/base/test/file_bug498897.css => dom/base/test/file_bug498897.css
rename : content/base/test/file_bug498897.html => dom/base/test/file_bug498897.html
rename : content/base/test/file_bug498897.html^headers^ => dom/base/test/file_bug498897.html^headers^
rename : content/base/test/file_bug503473-frame.sjs => dom/base/test/file_bug503473-frame.sjs
rename : content/base/test/file_bug503481.sjs => dom/base/test/file_bug503481.sjs
rename : content/base/test/file_bug503481b_inner.html => dom/base/test/file_bug503481b_inner.html
rename : content/base/test/file_bug541937.html => dom/base/test/file_bug541937.html
rename : content/base/test/file_bug541937.xhtml => dom/base/test/file_bug541937.xhtml
rename : content/base/test/file_bug557892.html => dom/base/test/file_bug557892.html
rename : content/base/test/file_bug562137.txt => dom/base/test/file_bug562137.txt
rename : content/base/test/file_bug590812-ref.xhtml => dom/base/test/file_bug590812-ref.xhtml
rename : content/base/test/file_bug590812.xml => dom/base/test/file_bug590812.xml
rename : content/base/test/file_bug590870.html => dom/base/test/file_bug590870.html
rename : content/base/test/file_bug601803a.html => dom/base/test/file_bug601803a.html
rename : content/base/test/file_bug601803b.html => dom/base/test/file_bug601803b.html
rename : content/base/test/file_bug604660-1.xml => dom/base/test/file_bug604660-1.xml
rename : content/base/test/file_bug604660-2.xsl => dom/base/test/file_bug604660-2.xsl
rename : content/base/test/file_bug604660-3.js => dom/base/test/file_bug604660-3.js
rename : content/base/test/file_bug604660-4.js => dom/base/test/file_bug604660-4.js
rename : content/base/test/file_bug604660-5.xml => dom/base/test/file_bug604660-5.xml
rename : content/base/test/file_bug604660-6.xsl => dom/base/test/file_bug604660-6.xsl
rename : content/base/test/file_bug622088.sjs => dom/base/test/file_bug622088.sjs
rename : content/base/test/file_bug622088_inner.html => dom/base/test/file_bug622088_inner.html
rename : content/base/test/file_bug675121.sjs => dom/base/test/file_bug675121.sjs
rename : content/base/test/file_bug687859-16.js => dom/base/test/file_bug687859-16.js
rename : content/base/test/file_bug687859-16.js^headers^ => dom/base/test/file_bug687859-16.js^headers^
rename : content/base/test/file_bug687859-bom.js => dom/base/test/file_bug687859-bom.js
rename : content/base/test/file_bug687859-bom.js^headers^ => dom/base/test/file_bug687859-bom.js^headers^
rename : content/base/test/file_bug687859-charset.js => dom/base/test/file_bug687859-charset.js
rename : content/base/test/file_bug687859-http.js => dom/base/test/file_bug687859-http.js
rename : content/base/test/file_bug687859-http.js^headers^ => dom/base/test/file_bug687859-http.js^headers^
rename : content/base/test/file_bug687859-inherit.js => dom/base/test/file_bug687859-inherit.js
rename : content/base/test/file_bug692434.xml => dom/base/test/file_bug692434.xml
rename : content/base/test/file_bug707142_baseline.json => dom/base/test/file_bug707142_baseline.json
rename : content/base/test/file_bug707142_bom.json => dom/base/test/file_bug707142_bom.json
rename : content/base/test/file_bug707142_utf-16.json => dom/base/test/file_bug707142_utf-16.json
rename : content/base/test/file_bug708620-2.html => dom/base/test/file_bug708620-2.html
rename : content/base/test/file_bug708620.html => dom/base/test/file_bug708620.html
rename : content/base/test/file_bug782342.txt => dom/base/test/file_bug782342.txt
rename : content/base/test/file_bug787778.sjs => dom/base/test/file_bug787778.sjs
rename : content/base/test/file_bug804395.jar => dom/base/test/file_bug804395.jar
rename : content/base/test/file_bug869432.eventsource => dom/base/test/file_bug869432.eventsource
rename : content/base/test/file_bug869432.eventsource^headers^ => dom/base/test/file_bug869432.eventsource^headers^
rename : content/base/test/file_bug902350.html => dom/base/test/file_bug902350.html
rename : content/base/test/file_bug902350_frame.html => dom/base/test/file_bug902350_frame.html
rename : content/base/test/file_bug907892.html => dom/base/test/file_bug907892.html
rename : content/base/test/file_bug945152.jar => dom/base/test/file_bug945152.jar
rename : content/base/test/file_bug945152_worker.js => dom/base/test/file_bug945152_worker.js
rename : content/base/test/file_general_document.html => dom/base/test/file_general_document.html
rename : content/base/test/file_html_in_xhr.html => dom/base/test/file_html_in_xhr.html
rename : content/base/test/file_html_in_xhr.sjs => dom/base/test/file_html_in_xhr.sjs
rename : content/base/test/file_html_in_xhr2.html => dom/base/test/file_html_in_xhr2.html
rename : content/base/test/file_html_in_xhr3.html => dom/base/test/file_html_in_xhr3.html
rename : content/base/test/file_htmlserializer_1.html => dom/base/test/file_htmlserializer_1.html
rename : content/base/test/file_htmlserializer_1_bodyonly.html => dom/base/test/file_htmlserializer_1_bodyonly.html
rename : content/base/test/file_htmlserializer_1_format.html => dom/base/test/file_htmlserializer_1_format.html
rename : content/base/test/file_htmlserializer_1_linebreak.html => dom/base/test/file_htmlserializer_1_linebreak.html
rename : content/base/test/file_htmlserializer_1_links.html => dom/base/test/file_htmlserializer_1_links.html
rename : content/base/test/file_htmlserializer_1_nested_body.html => dom/base/test/file_htmlserializer_1_nested_body.html
rename : content/base/test/file_htmlserializer_1_no_body.html => dom/base/test/file_htmlserializer_1_no_body.html
rename : content/base/test/file_htmlserializer_1_noflag.html => dom/base/test/file_htmlserializer_1_noflag.html
rename : content/base/test/file_htmlserializer_1_noformatpre.html => dom/base/test/file_htmlserializer_1_noformatpre.html
rename : content/base/test/file_htmlserializer_1_raw.html => dom/base/test/file_htmlserializer_1_raw.html
rename : content/base/test/file_htmlserializer_1_sibling_body.html => dom/base/test/file_htmlserializer_1_sibling_body.html
rename : content/base/test/file_htmlserializer_1_sibling_body_only_body.html => dom/base/test/file_htmlserializer_1_sibling_body_only_body.html
rename : content/base/test/file_htmlserializer_1_wrap.html => dom/base/test/file_htmlserializer_1_wrap.html
rename : content/base/test/file_htmlserializer_2.html => dom/base/test/file_htmlserializer_2.html
rename : content/base/test/file_htmlserializer_2_basic.html => dom/base/test/file_htmlserializer_2_basic.html
rename : content/base/test/file_htmlserializer_2_enthtml.html => dom/base/test/file_htmlserializer_2_enthtml.html
rename : content/base/test/file_htmlserializer_2_entw3c.html => dom/base/test/file_htmlserializer_2_entw3c.html
rename : content/base/test/file_htmlserializer_2_latin1.html => dom/base/test/file_htmlserializer_2_latin1.html
rename : content/base/test/file_htmlserializer_ipv6.html => dom/base/test/file_htmlserializer_ipv6.html
rename : content/base/test/file_htmlserializer_ipv6_out.html => dom/base/test/file_htmlserializer_ipv6_out.html
rename : content/base/test/file_mixed_content_frameNavigation.html => dom/base/test/file_mixed_content_frameNavigation.html
rename : content/base/test/file_mixed_content_frameNavigation_blankTarget.html => dom/base/test/file_mixed_content_frameNavigation_blankTarget.html
rename : content/base/test/file_mixed_content_frameNavigation_grandchild.html => dom/base/test/file_mixed_content_frameNavigation_grandchild.html
rename : content/base/test/file_mixed_content_frameNavigation_innermost.html => dom/base/test/file_mixed_content_frameNavigation_innermost.html
rename : content/base/test/file_mixed_content_frameNavigation_secure.html => dom/base/test/file_mixed_content_frameNavigation_secure.html
rename : content/base/test/file_mixed_content_frameNavigation_secure_grandchild.html => dom/base/test/file_mixed_content_frameNavigation_secure_grandchild.html
rename : content/base/test/file_mixed_content_main.html => dom/base/test/file_mixed_content_main.html
rename : content/base/test/file_mixed_content_main_bug803225.html => dom/base/test/file_mixed_content_main_bug803225.html
rename : content/base/test/file_mixed_content_main_bug803225_websocket_wsh.py => dom/base/test/file_mixed_content_main_bug803225_websocket_wsh.py
rename : content/base/test/file_mixed_content_server.sjs => dom/base/test/file_mixed_content_server.sjs
rename : content/base/test/file_mozfiledataurl_audio.ogg => dom/base/test/file_mozfiledataurl_audio.ogg
rename : content/base/test/file_mozfiledataurl_doc.html => dom/base/test/file_mozfiledataurl_doc.html
rename : content/base/test/file_mozfiledataurl_img.jpg => dom/base/test/file_mozfiledataurl_img.jpg
rename : content/base/test/file_mozfiledataurl_inner.html => dom/base/test/file_mozfiledataurl_inner.html
rename : content/base/test/file_mozfiledataurl_text.txt => dom/base/test/file_mozfiledataurl_text.txt
rename : content/base/test/file_restrictedEventSource.sjs => dom/base/test/file_restrictedEventSource.sjs
rename : content/base/test/file_websocket_basic_wsh.py => dom/base/test/file_websocket_basic_wsh.py
rename : content/base/test/file_websocket_hello_wsh.py => dom/base/test/file_websocket_hello_wsh.py
rename : content/base/test/file_websocket_http_resource.txt => dom/base/test/file_websocket_http_resource.txt
rename : content/base/test/file_websocket_wsh.py => dom/base/test/file_websocket_wsh.py
rename : content/base/test/file_x-frame-options_main.html => dom/base/test/file_x-frame-options_main.html
rename : content/base/test/file_x-frame-options_page.sjs => dom/base/test/file_x-frame-options_page.sjs
rename : content/base/test/file_xhtmlserializer_1.xhtml => dom/base/test/file_xhtmlserializer_1.xhtml
rename : content/base/test/file_xhtmlserializer_1_bodyonly.xhtml => dom/base/test/file_xhtmlserializer_1_bodyonly.xhtml
rename : content/base/test/file_xhtmlserializer_1_format.xhtml => dom/base/test/file_xhtmlserializer_1_format.xhtml
rename : content/base/test/file_xhtmlserializer_1_linebreak.xhtml => dom/base/test/file_xhtmlserializer_1_linebreak.xhtml
rename : content/base/test/file_xhtmlserializer_1_links.xhtml => dom/base/test/file_xhtmlserializer_1_links.xhtml
rename : content/base/test/file_xhtmlserializer_1_nested_body.xhtml => dom/base/test/file_xhtmlserializer_1_nested_body.xhtml
rename : content/base/test/file_xhtmlserializer_1_no_body.xhtml => dom/base/test/file_xhtmlserializer_1_no_body.xhtml
rename : content/base/test/file_xhtmlserializer_1_noflag.xhtml => dom/base/test/file_xhtmlserializer_1_noflag.xhtml
rename : content/base/test/file_xhtmlserializer_1_noformatpre.xhtml => dom/base/test/file_xhtmlserializer_1_noformatpre.xhtml
rename : content/base/test/file_xhtmlserializer_1_raw.xhtml => dom/base/test/file_xhtmlserializer_1_raw.xhtml
rename : content/base/test/file_xhtmlserializer_1_sibling_body.xhtml => dom/base/test/file_xhtmlserializer_1_sibling_body.xhtml
rename : content/base/test/file_xhtmlserializer_1_sibling_body_only_body.xhtml => dom/base/test/file_xhtmlserializer_1_sibling_body_only_body.xhtml
rename : content/base/test/file_xhtmlserializer_1_wrap.xhtml => dom/base/test/file_xhtmlserializer_1_wrap.xhtml
rename : content/base/test/file_xhtmlserializer_2.xhtml => dom/base/test/file_xhtmlserializer_2.xhtml
rename : content/base/test/file_xhtmlserializer_2_basic.xhtml => dom/base/test/file_xhtmlserializer_2_basic.xhtml
rename : content/base/test/file_xhtmlserializer_2_enthtml.xhtml => dom/base/test/file_xhtmlserializer_2_enthtml.xhtml
rename : content/base/test/file_xhtmlserializer_2_entw3c.xhtml => dom/base/test/file_xhtmlserializer_2_entw3c.xhtml
rename : content/base/test/file_xhtmlserializer_2_latin1.xhtml => dom/base/test/file_xhtmlserializer_2_latin1.xhtml
rename : content/base/test/fileutils.js => dom/base/test/fileutils.js
rename : content/base/test/forRemoval.resource => dom/base/test/forRemoval.resource
rename : content/base/test/forRemoval.resource^headers^ => dom/base/test/forRemoval.resource^headers^
rename : content/base/test/formReset.html => dom/base/test/formReset.html
rename : content/base/test/invalid_accesscontrol.resource => dom/base/test/invalid_accesscontrol.resource
rename : content/base/test/invalid_accesscontrol.resource^headers^ => dom/base/test/invalid_accesscontrol.resource^headers^
rename : content/base/test/mochitest-child-permissions.ini => dom/base/test/mochitest-child-permissions.ini
rename : content/base/test/moz.build => dom/base/test/moz.build
rename : content/base/test/mutationobserver_dialog.html => dom/base/test/mutationobserver_dialog.html
rename : content/base/test/progressserver.sjs => dom/base/test/progressserver.sjs
rename : content/base/test/reftest/mixed-bmp-png.ico => dom/base/test/reftest/mixed-bmp-png.ico
rename : content/base/test/reftest/reftest.list => dom/base/test/reftest/reftest.list
rename : content/base/test/reftest/test_bug920877-ref.html => dom/base/test/reftest/test_bug920877-ref.html
rename : content/base/test/reftest/test_bug920877.html => dom/base/test/reftest/test_bug920877.html
rename : content/base/test/responseIdentical.sjs => dom/base/test/responseIdentical.sjs
rename : content/base/test/script-1_bug597345.sjs => dom/base/test/script-1_bug597345.sjs
rename : content/base/test/script-2_bug597345.js => dom/base/test/script-2_bug597345.js
rename : content/base/test/script_bug602838.sjs => dom/base/test/script_bug602838.sjs
rename : content/base/test/send_gzip_content.sjs => dom/base/test/send_gzip_content.sjs
rename : content/base/test/somedatas.resource => dom/base/test/somedatas.resource
rename : content/base/test/somedatas.resource^headers^ => dom/base/test/somedatas.resource^headers^
rename : content/base/test/test_CrossSiteXHR.html => dom/base/test/test_CrossSiteXHR.html
rename : content/base/test/test_CrossSiteXHR_cache.html => dom/base/test/test_CrossSiteXHR_cache.html
rename : content/base/test/test_CrossSiteXHR_origin.html => dom/base/test/test_CrossSiteXHR_origin.html
rename : content/base/test/test_DOMException.html => dom/base/test/test_DOMException.html
rename : content/base/test/test_EventSource_redirects.html => dom/base/test/test_EventSource_redirects.html
rename : content/base/test/test_NodeIterator_basics_filters.xhtml => dom/base/test/test_NodeIterator_basics_filters.xhtml
rename : content/base/test/test_NodeIterator_mutations_1.xhtml => dom/base/test/test_NodeIterator_mutations_1.xhtml
rename : content/base/test/test_NodeIterator_mutations_2.html => dom/base/test/test_NodeIterator_mutations_2.html
rename : content/base/test/test_NodeIterator_mutations_3.html => dom/base/test/test_NodeIterator_mutations_3.html
rename : content/base/test/test_XHR.html => dom/base/test/test_XHR.html
rename : content/base/test/test_XHRDocURI.html => dom/base/test/test_XHRDocURI.html
rename : content/base/test/test_XHRResponseURL.html => dom/base/test/test_XHRResponseURL.html
rename : content/base/test/test_XHRSendData.html => dom/base/test/test_XHRSendData.html
rename : content/base/test/test_XHR_anon.html => dom/base/test/test_XHR_anon.html
rename : content/base/test/test_XHR_header.html => dom/base/test/test_XHR_header.html
rename : content/base/test/test_XHR_onuploadprogress.html => dom/base/test/test_XHR_onuploadprogress.html
rename : content/base/test/test_XHR_parameters.html => dom/base/test/test_XHR_parameters.html
rename : content/base/test/test_XHR_system.html => dom/base/test/test_XHR_system.html
rename : content/base/test/test_XHR_timeout.html => dom/base/test/test_XHR_timeout.html
rename : content/base/test/test_XHR_timeout.js => dom/base/test/test_XHR_timeout.js
rename : content/base/test/test_base.xhtml => dom/base/test/test_base.xhtml
rename : content/base/test/test_blobconstructor.html => dom/base/test/test_blobconstructor.html
rename : content/base/test/test_bug1008126.html => dom/base/test/test_bug1008126.html
rename : content/base/test/test_bug1011748.html => dom/base/test/test_bug1011748.html
rename : content/base/test/test_bug1025933.html => dom/base/test/test_bug1025933.html
rename : content/base/test/test_bug1057176.html => dom/base/test/test_bug1057176.html
rename : content/base/test/test_bug1081686.html => dom/base/test/test_bug1081686.html
rename : content/base/test/test_bug166235.html => dom/base/test/test_bug166235.html
rename : content/base/test/test_bug199959.html => dom/base/test/test_bug199959.html
rename : content/base/test/test_bug218236.html => dom/base/test/test_bug218236.html
rename : content/base/test/test_bug218277.html => dom/base/test/test_bug218277.html
rename : content/base/test/test_bug238409.html => dom/base/test/test_bug238409.html
rename : content/base/test/test_bug254337.html => dom/base/test/test_bug254337.html
rename : content/base/test/test_bug270145.xhtml => dom/base/test/test_bug270145.xhtml
rename : content/base/test/test_bug276037-1.html => dom/base/test/test_bug276037-1.html
rename : content/base/test/test_bug276037-2.xhtml => dom/base/test/test_bug276037-2.xhtml
rename : content/base/test/test_bug282547.html => dom/base/test/test_bug282547.html
rename : content/base/test/test_bug28293.html => dom/base/test/test_bug28293.html
rename : content/base/test/test_bug28293.xhtml => dom/base/test/test_bug28293.xhtml
rename : content/base/test/test_bug298064.html => dom/base/test/test_bug298064.html
rename : content/base/test/test_bug300992.html => dom/base/test/test_bug300992.html
rename : content/base/test/test_bug311681.xml => dom/base/test/test_bug311681.xml
rename : content/base/test/test_bug313646.html => dom/base/test/test_bug313646.html
rename : content/base/test/test_bug320799.html => dom/base/test/test_bug320799.html
rename : content/base/test/test_bug322317.html => dom/base/test/test_bug322317.html
rename : content/base/test/test_bug326337.html => dom/base/test/test_bug326337.html
rename : content/base/test/test_bug330925.xhtml => dom/base/test/test_bug330925.xhtml
rename : content/base/test/test_bug331959.html => dom/base/test/test_bug331959.html
rename : content/base/test/test_bug333198.html => dom/base/test/test_bug333198.html
rename : content/base/test/test_bug333673.html => dom/base/test/test_bug333673.html
rename : content/base/test/test_bug337631.html => dom/base/test/test_bug337631.html
rename : content/base/test/test_bug338541.xhtml => dom/base/test/test_bug338541.xhtml
rename : content/base/test/test_bug338583.html => dom/base/test/test_bug338583.html
rename : content/base/test/test_bug338679.html => dom/base/test/test_bug338679.html
rename : content/base/test/test_bug339494.html => dom/base/test/test_bug339494.html
rename : content/base/test/test_bug339494.xhtml => dom/base/test/test_bug339494.xhtml
rename : content/base/test/test_bug340571.html => dom/base/test/test_bug340571.html
rename : content/base/test/test_bug343596.html => dom/base/test/test_bug343596.html
rename : content/base/test/test_bug345339.html => dom/base/test/test_bug345339.html
rename : content/base/test/test_bug346485.html => dom/base/test/test_bug346485.html
rename : content/base/test/test_bug352728.html => dom/base/test/test_bug352728.html
rename : content/base/test/test_bug352728.xhtml => dom/base/test/test_bug352728.xhtml
rename : content/base/test/test_bug353334.html => dom/base/test/test_bug353334.html
rename : content/base/test/test_bug355026.html => dom/base/test/test_bug355026.html
rename : content/base/test/test_bug357450.html => dom/base/test/test_bug357450.html
rename : content/base/test/test_bug357450.js => dom/base/test/test_bug357450.js
rename : content/base/test/test_bug357450.xhtml => dom/base/test/test_bug357450.xhtml
rename : content/base/test/test_bug357450_svg.xhtml => dom/base/test/test_bug357450_svg.xhtml
rename : content/base/test/test_bug357509.html => dom/base/test/test_bug357509.html
rename : content/base/test/test_bug358660.html => dom/base/test/test_bug358660.html
rename : content/base/test/test_bug362391.xhtml => dom/base/test/test_bug362391.xhtml
rename : content/base/test/test_bug364092.xhtml => dom/base/test/test_bug364092.xhtml
rename : content/base/test/test_bug364413.xhtml => dom/base/test/test_bug364413.xhtml
rename : content/base/test/test_bug366944.html => dom/base/test/test_bug366944.html
rename : content/base/test/test_bug366946.html => dom/base/test/test_bug366946.html
rename : content/base/test/test_bug367164.html => dom/base/test/test_bug367164.html
rename : content/base/test/test_bug368972.html => dom/base/test/test_bug368972.html
rename : content/base/test/test_bug371576-2.html => dom/base/test/test_bug371576-2.html
rename : content/base/test/test_bug371576-3.html => dom/base/test/test_bug371576-3.html
rename : content/base/test/test_bug371576-4.html => dom/base/test/test_bug371576-4.html
rename : content/base/test/test_bug371576-5.html => dom/base/test/test_bug371576-5.html
rename : content/base/test/test_bug372086.html => dom/base/test/test_bug372086.html
rename : content/base/test/test_bug372964-2.html => dom/base/test/test_bug372964-2.html
rename : content/base/test/test_bug372964.html => dom/base/test/test_bug372964.html
rename : content/base/test/test_bug373181.xhtml => dom/base/test/test_bug373181.xhtml
rename : content/base/test/test_bug375314.html => dom/base/test/test_bug375314.html
rename : content/base/test/test_bug378969.html => dom/base/test/test_bug378969.html
rename : content/base/test/test_bug380418.html => dom/base/test/test_bug380418.html
rename : content/base/test/test_bug380418.html^headers^ => dom/base/test/test_bug380418.html^headers^
rename : content/base/test/test_bug382113.html => dom/base/test/test_bug382113.html
rename : content/base/test/test_bug382871.html => dom/base/test/test_bug382871.html
rename : content/base/test/test_bug384003.xhtml => dom/base/test/test_bug384003.xhtml
rename : content/base/test/test_bug390219.html => dom/base/test/test_bug390219.html
rename : content/base/test/test_bug390735.html => dom/base/test/test_bug390735.html
rename : content/base/test/test_bug392318.html => dom/base/test/test_bug392318.html
rename : content/base/test/test_bug392511.html => dom/base/test/test_bug392511.html
rename : content/base/test/test_bug393968.html => dom/base/test/test_bug393968.html
rename : content/base/test/test_bug395915.html => dom/base/test/test_bug395915.html
rename : content/base/test/test_bug397234.html => dom/base/test/test_bug397234.html
rename : content/base/test/test_bug398243.html => dom/base/test/test_bug398243.html
rename : content/base/test/test_bug401662.html => dom/base/test/test_bug401662.html
rename : content/base/test/test_bug402150.html => dom/base/test/test_bug402150.html
rename : content/base/test/test_bug402150.html^headers^ => dom/base/test/test_bug402150.html^headers^
rename : content/base/test/test_bug403841.html => dom/base/test/test_bug403841.html
rename : content/base/test/test_bug403852.html => dom/base/test/test_bug403852.html
rename : content/base/test/test_bug403868.xml => dom/base/test/test_bug403868.xml
rename : content/base/test/test_bug405182.html => dom/base/test/test_bug405182.html
rename : content/base/test/test_bug409380.html => dom/base/test/test_bug409380.html
rename : content/base/test/test_bug410229.html => dom/base/test/test_bug410229.html
rename : content/base/test/test_bug413974.html => dom/base/test/test_bug413974.html
rename : content/base/test/test_bug414190.html => dom/base/test/test_bug414190.html
rename : content/base/test/test_bug415860.html => dom/base/test/test_bug415860.html
rename : content/base/test/test_bug416317-1.html => dom/base/test/test_bug416317-1.html
rename : content/base/test/test_bug416317-2.html => dom/base/test/test_bug416317-2.html
rename : content/base/test/test_bug416383.html => dom/base/test/test_bug416383.html
rename : content/base/test/test_bug417255.html => dom/base/test/test_bug417255.html
rename : content/base/test/test_bug417384.html => dom/base/test/test_bug417384.html
rename : content/base/test/test_bug418214.html => dom/base/test/test_bug418214.html
rename : content/base/test/test_bug419132.html => dom/base/test/test_bug419132.html
rename : content/base/test/test_bug419527.xhtml => dom/base/test/test_bug419527.xhtml
rename : content/base/test/test_bug420609.xhtml => dom/base/test/test_bug420609.xhtml
rename : content/base/test/test_bug420700.html => dom/base/test/test_bug420700.html
rename : content/base/test/test_bug421602.html => dom/base/test/test_bug421602.html
rename : content/base/test/test_bug422403-1.html => dom/base/test/test_bug422403-1.html
rename : content/base/test/test_bug422403-2.xhtml => dom/base/test/test_bug422403-2.xhtml
rename : content/base/test/test_bug422537.html => dom/base/test/test_bug422537.html
rename : content/base/test/test_bug424212.html => dom/base/test/test_bug424212.html
rename : content/base/test/test_bug424359-1.html => dom/base/test/test_bug424359-1.html
rename : content/base/test/test_bug424359-2.html => dom/base/test/test_bug424359-2.html
rename : content/base/test/test_bug425013.html => dom/base/test/test_bug425013.html
rename : content/base/test/test_bug426308.html => dom/base/test/test_bug426308.html
rename : content/base/test/test_bug426646.html => dom/base/test/test_bug426646.html
rename : content/base/test/test_bug428847.html => dom/base/test/test_bug428847.html
rename : content/base/test/test_bug429157.html => dom/base/test/test_bug429157.html
rename : content/base/test/test_bug431082.html => dom/base/test/test_bug431082.html
rename : content/base/test/test_bug431701.html => dom/base/test/test_bug431701.html
rename : content/base/test/test_bug431833.html => dom/base/test/test_bug431833.html
rename : content/base/test/test_bug433533.html => dom/base/test/test_bug433533.html
rename : content/base/test/test_bug433662.html => dom/base/test/test_bug433662.html
rename : content/base/test/test_bug435425.html => dom/base/test/test_bug435425.html
rename : content/base/test/test_bug438519.html => dom/base/test/test_bug438519.html
rename : content/base/test/test_bug444030.xhtml => dom/base/test/test_bug444030.xhtml
rename : content/base/test/test_bug444322.html => dom/base/test/test_bug444322.html
rename : content/base/test/test_bug444546.html => dom/base/test/test_bug444546.html
rename : content/base/test/test_bug444722.html => dom/base/test/test_bug444722.html
rename : content/base/test/test_bug448993.html => dom/base/test/test_bug448993.html
rename : content/base/test/test_bug450160.html => dom/base/test/test_bug450160.html
rename : content/base/test/test_bug451376.html => dom/base/test/test_bug451376.html
rename : content/base/test/test_bug453521.html => dom/base/test/test_bug453521.html
rename : content/base/test/test_bug453736.html => dom/base/test/test_bug453736.html
rename : content/base/test/test_bug454325.html => dom/base/test/test_bug454325.html
rename : content/base/test/test_bug454326.html => dom/base/test/test_bug454326.html
rename : content/base/test/test_bug455472.html => dom/base/test/test_bug455472.html
rename : content/base/test/test_bug455629.html => dom/base/test/test_bug455629.html
rename : content/base/test/test_bug456262.html => dom/base/test/test_bug456262.html
rename : content/base/test/test_bug457746.html => dom/base/test/test_bug457746.html
rename : content/base/test/test_bug459424.html => dom/base/test/test_bug459424.html
rename : content/base/test/test_bug461555.html => dom/base/test/test_bug461555.html
rename : content/base/test/test_bug461735.html => dom/base/test/test_bug461735.html
rename : content/base/test/test_bug465767.html => dom/base/test/test_bug465767.html
rename : content/base/test/test_bug466080.html => dom/base/test/test_bug466080.html
rename : content/base/test/test_bug466409.html => dom/base/test/test_bug466409.html
rename : content/base/test/test_bug466751.xhtml => dom/base/test/test_bug466751.xhtml
rename : content/base/test/test_bug469020.html => dom/base/test/test_bug469020.html
rename : content/base/test/test_bug469304.html => dom/base/test/test_bug469304.html
rename : content/base/test/test_bug473162-1.html => dom/base/test/test_bug473162-1.html
rename : content/base/test/test_bug473162-2.html => dom/base/test/test_bug473162-2.html
rename : content/base/test/test_bug475156.html => dom/base/test/test_bug475156.html
rename : content/base/test/test_bug482935.html => dom/base/test/test_bug482935.html
rename : content/base/test/test_bug484396.html => dom/base/test/test_bug484396.html
rename : content/base/test/test_bug493881.html => dom/base/test/test_bug493881.html
rename : content/base/test/test_bug493881.js => dom/base/test/test_bug493881.js
rename : content/base/test/test_bug498240.html => dom/base/test/test_bug498240.html
rename : content/base/test/test_bug498433.html => dom/base/test/test_bug498433.html
rename : content/base/test/test_bug498897.html => dom/base/test/test_bug498897.html
rename : content/base/test/test_bug499656.html => dom/base/test/test_bug499656.html
rename : content/base/test/test_bug499656.xhtml => dom/base/test/test_bug499656.xhtml
rename : content/base/test/test_bug500937.html => dom/base/test/test_bug500937.html
rename : content/base/test/test_bug503473.html => dom/base/test/test_bug503473.html
rename : content/base/test/test_bug503481.html => dom/base/test/test_bug503481.html
rename : content/base/test/test_bug503481b.html => dom/base/test/test_bug503481b.html
rename : content/base/test/test_bug505783.html => dom/base/test/test_bug505783.html
rename : content/base/test/test_bug51034.html => dom/base/test/test_bug51034.html
rename : content/base/test/test_bug513194.html => dom/base/test/test_bug513194.html
rename : content/base/test/test_bug5141.html => dom/base/test/test_bug5141.html
rename : content/base/test/test_bug514487.html => dom/base/test/test_bug514487.html
rename : content/base/test/test_bug515401.html => dom/base/test/test_bug515401.html
rename : content/base/test/test_bug518104.html => dom/base/test/test_bug518104.html
rename : content/base/test/test_bug527896.html => dom/base/test/test_bug527896.html
rename : content/base/test/test_bug540854.html => dom/base/test/test_bug540854.html
rename : content/base/test/test_bug541937.html => dom/base/test/test_bug541937.html
rename : content/base/test/test_bug544642.html => dom/base/test/test_bug544642.html
rename : content/base/test/test_bug545644.html => dom/base/test/test_bug545644.html
rename : content/base/test/test_bug545644.xhtml => dom/base/test/test_bug545644.xhtml
rename : content/base/test/test_bug548463.html => dom/base/test/test_bug548463.html
rename : content/base/test/test_bug553896.xhtml => dom/base/test/test_bug553896.xhtml
rename : content/base/test/test_bug557892.html => dom/base/test/test_bug557892.html
rename : content/base/test/test_bug558726.html => dom/base/test/test_bug558726.html
rename : content/base/test/test_bug559526.html => dom/base/test/test_bug559526.html
rename : content/base/test/test_bug560780.html => dom/base/test/test_bug560780.html
rename : content/base/test/test_bug562137.html => dom/base/test/test_bug562137.html
rename : content/base/test/test_bug562169-1.html => dom/base/test/test_bug562169-1.html
rename : content/base/test/test_bug562169-2.html => dom/base/test/test_bug562169-2.html
rename : content/base/test/test_bug562652.html => dom/base/test/test_bug562652.html
rename : content/base/test/test_bug564047.html => dom/base/test/test_bug564047.html
rename : content/base/test/test_bug564863.xhtml => dom/base/test/test_bug564863.xhtml
rename : content/base/test/test_bug567350.html => dom/base/test/test_bug567350.html
rename : content/base/test/test_bug578096.html => dom/base/test/test_bug578096.html
rename : content/base/test/test_bug585978.html => dom/base/test/test_bug585978.html
rename : content/base/test/test_bug587931.html => dom/base/test/test_bug587931.html
rename : content/base/test/test_bug588990.html => dom/base/test/test_bug588990.html
rename : content/base/test/test_bug590812.html => dom/base/test/test_bug590812.html
rename : content/base/test/test_bug590870.html => dom/base/test/test_bug590870.html
rename : content/base/test/test_bug592366.html => dom/base/test/test_bug592366.html
rename : content/base/test/test_bug592829.html => dom/base/test/test_bug592829.html
rename : content/base/test/test_bug597345.html => dom/base/test/test_bug597345.html
rename : content/base/test/test_bug599588.html => dom/base/test/test_bug599588.html
rename : content/base/test/test_bug601803.html => dom/base/test/test_bug601803.html
rename : content/base/test/test_bug602838.html => dom/base/test/test_bug602838.html
rename : content/base/test/test_bug604592.html => dom/base/test/test_bug604592.html
rename : content/base/test/test_bug604660.html => dom/base/test/test_bug604660.html
rename : content/base/test/test_bug605982.html => dom/base/test/test_bug605982.html
rename : content/base/test/test_bug606729.html => dom/base/test/test_bug606729.html
rename : content/base/test/test_bug614058.html => dom/base/test/test_bug614058.html
rename : content/base/test/test_bug614583.html => dom/base/test/test_bug614583.html
rename : content/base/test/test_bug622088.html => dom/base/test/test_bug622088.html
rename : content/base/test/test_bug622117.html => dom/base/test/test_bug622117.html
rename : content/base/test/test_bug622246.html => dom/base/test/test_bug622246.html
rename : content/base/test/test_bug625722.html => dom/base/test/test_bug625722.html
rename : content/base/test/test_bug626262.html => dom/base/test/test_bug626262.html
rename : content/base/test/test_bug628938.html => dom/base/test/test_bug628938.html
rename : content/base/test/test_bug631615.html => dom/base/test/test_bug631615.html
rename : content/base/test/test_bug638112.html => dom/base/test/test_bug638112.html
rename : content/base/test/test_bug647518.html => dom/base/test/test_bug647518.html
rename : content/base/test/test_bug650001.html => dom/base/test/test_bug650001.html
rename : content/base/test/test_bug656283.html => dom/base/test/test_bug656283.html
rename : content/base/test/test_bug664916.html => dom/base/test/test_bug664916.html
rename : content/base/test/test_bug666604.html => dom/base/test/test_bug666604.html
rename : content/base/test/test_bug675121.html => dom/base/test/test_bug675121.html
rename : content/base/test/test_bug675166.html => dom/base/test/test_bug675166.html
rename : content/base/test/test_bug682463.html => dom/base/test/test_bug682463.html
rename : content/base/test/test_bug682554.html => dom/base/test/test_bug682554.html
rename : content/base/test/test_bug682592.html => dom/base/test/test_bug682592.html
rename : content/base/test/test_bug684671.html => dom/base/test/test_bug684671.html
rename : content/base/test/test_bug685798.html => dom/base/test/test_bug685798.html
rename : content/base/test/test_bug686449.xhtml => dom/base/test/test_bug686449.xhtml
rename : content/base/test/test_bug687859.html => dom/base/test/test_bug687859.html
rename : content/base/test/test_bug690056.html => dom/base/test/test_bug690056.html
rename : content/base/test/test_bug692434.html => dom/base/test/test_bug692434.html
rename : content/base/test/test_bug693615.html => dom/base/test/test_bug693615.html
rename : content/base/test/test_bug693875.html => dom/base/test/test_bug693875.html
rename : content/base/test/test_bug694754.xhtml => dom/base/test/test_bug694754.xhtml
rename : content/base/test/test_bug696301-1.html => dom/base/test/test_bug696301-1.html
rename : content/base/test/test_bug696301-2.html => dom/base/test/test_bug696301-2.html
rename : content/base/test/test_bug698381.html => dom/base/test/test_bug698381.html
rename : content/base/test/test_bug698384.html => dom/base/test/test_bug698384.html
rename : content/base/test/test_bug704063.html => dom/base/test/test_bug704063.html
rename : content/base/test/test_bug707142.html => dom/base/test/test_bug707142.html
rename : content/base/test/test_bug708620.html => dom/base/test/test_bug708620.html
rename : content/base/test/test_bug711047.html => dom/base/test/test_bug711047.html
rename : content/base/test/test_bug711180.html => dom/base/test/test_bug711180.html
rename : content/base/test/test_bug719533.html => dom/base/test/test_bug719533.html
rename : content/base/test/test_bug726364.html => dom/base/test/test_bug726364.html
rename : content/base/test/test_bug737087.html => dom/base/test/test_bug737087.html
rename : content/base/test/test_bug737565.html => dom/base/test/test_bug737565.html
rename : content/base/test/test_bug737612.html => dom/base/test/test_bug737612.html
rename : content/base/test/test_bug738108.html => dom/base/test/test_bug738108.html
rename : content/base/test/test_bug744830.html => dom/base/test/test_bug744830.html
rename : content/base/test/test_bug749367.html => dom/base/test/test_bug749367.html
rename : content/base/test/test_bug753278.html => dom/base/test/test_bug753278.html
rename : content/base/test/test_bug761120.html => dom/base/test/test_bug761120.html
rename : content/base/test/test_bug782342.html => dom/base/test/test_bug782342.html
rename : content/base/test/test_bug787778.html => dom/base/test/test_bug787778.html
rename : content/base/test/test_bug789856.html => dom/base/test/test_bug789856.html
rename : content/base/test/test_bug804395.html => dom/base/test/test_bug804395.html
rename : content/base/test/test_bug809003.html => dom/base/test/test_bug809003.html
rename : content/base/test/test_bug810494.html => dom/base/test/test_bug810494.html
rename : content/base/test/test_bug811701.html => dom/base/test/test_bug811701.html
rename : content/base/test/test_bug811701.xhtml => dom/base/test/test_bug811701.xhtml
rename : content/base/test/test_bug813919.html => dom/base/test/test_bug813919.html
rename : content/base/test/test_bug814576.html => dom/base/test/test_bug814576.html
rename : content/base/test/test_bug819051.html => dom/base/test/test_bug819051.html
rename : content/base/test/test_bug820909.html => dom/base/test/test_bug820909.html
rename : content/base/test/test_bug827160.html => dom/base/test/test_bug827160.html
rename : content/base/test/test_bug840098.html => dom/base/test/test_bug840098.html
rename : content/base/test/test_bug864595.html => dom/base/test/test_bug864595.html
rename : content/base/test/test_bug868999.html => dom/base/test/test_bug868999.html
rename : content/base/test/test_bug869000.html => dom/base/test/test_bug869000.html
rename : content/base/test/test_bug869002.html => dom/base/test/test_bug869002.html
rename : content/base/test/test_bug869006.html => dom/base/test/test_bug869006.html
rename : content/base/test/test_bug876282.html => dom/base/test/test_bug876282.html
rename : content/base/test/test_bug890580.html => dom/base/test/test_bug890580.html
rename : content/base/test/test_bug891952.html => dom/base/test/test_bug891952.html
rename : content/base/test/test_bug894874.html => dom/base/test/test_bug894874.html
rename : content/base/test/test_bug895239.html => dom/base/test/test_bug895239.html
rename : content/base/test/test_bug895974.html => dom/base/test/test_bug895974.html
rename : content/base/test/test_bug902847.html => dom/base/test/test_bug902847.html
rename : content/base/test/test_bug907892.html => dom/base/test/test_bug907892.html
rename : content/base/test/test_bug922681.html => dom/base/test/test_bug922681.html
rename : content/base/test/test_bug927196.html => dom/base/test/test_bug927196.html
rename : content/base/test/test_bug945152.html => dom/base/test/test_bug945152.html
rename : content/base/test/test_bug982153.html => dom/base/test/test_bug982153.html
rename : content/base/test/test_caretPositionFromPoint.html => dom/base/test/test_caretPositionFromPoint.html
rename : content/base/test/test_child_process_shutdown_message.html => dom/base/test/test_child_process_shutdown_message.html
rename : content/base/test/test_classList.html => dom/base/test/test_classList.html
rename : content/base/test/test_copyimage.html => dom/base/test/test_copyimage.html
rename : content/base/test/test_copypaste.html => dom/base/test/test_copypaste.html
rename : content/base/test/test_copypaste.xhtml => dom/base/test/test_copypaste.xhtml
rename : content/base/test/test_copypaste.xul => dom/base/test/test_copypaste.xul
rename : content/base/test/test_createHTMLDocument.html => dom/base/test/test_createHTMLDocument.html
rename : content/base/test/test_declare_stylesheet_obsolete.html => dom/base/test/test_declare_stylesheet_obsolete.html
rename : content/base/test/test_document_constructor.html => dom/base/test/test_document_constructor.html
rename : content/base/test/test_domparser_null_char.html => dom/base/test/test_domparser_null_char.html
rename : content/base/test/test_domparsing.html => dom/base/test/test_domparsing.html
rename : content/base/test/test_element.matches.html => dom/base/test/test_element.matches.html
rename : content/base/test/test_elementTraversal.html => dom/base/test/test_elementTraversal.html
rename : content/base/test/test_element_closest.html => dom/base/test/test_element_closest.html
rename : content/base/test/test_encodeToStringWithMaxLength.html => dom/base/test/test_encodeToStringWithMaxLength.html
rename : content/base/test/test_file_from_blob.html => dom/base/test/test_file_from_blob.html
rename : content/base/test/test_fileapi.html => dom/base/test/test_fileapi.html
rename : content/base/test/test_fileapi_slice.html => dom/base/test/test_fileapi_slice.html
rename : content/base/test/test_getElementById.html => dom/base/test/test_getElementById.html
rename : content/base/test/test_html_colors_quirks.html => dom/base/test/test_html_colors_quirks.html
rename : content/base/test/test_html_colors_standards.html => dom/base/test/test_html_colors_standards.html
rename : content/base/test/test_html_in_xhr.html => dom/base/test/test_html_in_xhr.html
rename : content/base/test/test_htmlcopyencoder.html => dom/base/test/test_htmlcopyencoder.html
rename : content/base/test/test_htmlcopyencoder.xhtml => dom/base/test/test_htmlcopyencoder.xhtml
rename : content/base/test/test_ipc_messagemanager_blob.html => dom/base/test/test_ipc_messagemanager_blob.html
rename : content/base/test/test_messagemanager_assertpermission.html => dom/base/test/test_messagemanager_assertpermission.html
rename : content/base/test/test_messagemanager_principal.html => dom/base/test/test_messagemanager_principal.html
rename : content/base/test/test_messagemanager_send_principal.html => dom/base/test/test_messagemanager_send_principal.html
rename : content/base/test/test_meta_viewport0.html => dom/base/test/test_meta_viewport0.html
rename : content/base/test/test_meta_viewport1.html => dom/base/test/test_meta_viewport1.html
rename : content/base/test/test_meta_viewport2.html => dom/base/test/test_meta_viewport2.html
rename : content/base/test/test_meta_viewport3.html => dom/base/test/test_meta_viewport3.html
rename : content/base/test/test_meta_viewport4.html => dom/base/test/test_meta_viewport4.html
rename : content/base/test/test_meta_viewport5.html => dom/base/test/test_meta_viewport5.html
rename : content/base/test/test_meta_viewport6.html => dom/base/test/test_meta_viewport6.html
rename : content/base/test/test_mixed_content_blocker.html => dom/base/test/test_mixed_content_blocker.html
rename : content/base/test/test_mixed_content_blocker_bug803225.html => dom/base/test/test_mixed_content_blocker_bug803225.html
rename : content/base/test/test_mixed_content_blocker_frameNavigation.html => dom/base/test/test_mixed_content_blocker_frameNavigation.html
rename : content/base/test/test_mozMatchesSelector.html => dom/base/test/test_mozMatchesSelector.html
rename : content/base/test/test_mozfiledataurl.html => dom/base/test/test_mozfiledataurl.html
rename : content/base/test/test_mutationobservers.html => dom/base/test/test_mutationobservers.html
rename : content/base/test/test_nodelist_holes.html => dom/base/test/test_nodelist_holes.html
rename : content/base/test/test_object.html => dom/base/test/test_object.html
rename : content/base/test/test_plugin_freezing.html => dom/base/test/test_plugin_freezing.html
rename : content/base/test/test_processing_instruction_update_stylesheet.xhtml => dom/base/test/test_processing_instruction_update_stylesheet.xhtml
rename : content/base/test/test_progress_events_for_gzip_data.html => dom/base/test/test_progress_events_for_gzip_data.html
rename : content/base/test/test_range_bounds.html => dom/base/test/test_range_bounds.html
rename : content/base/test/test_reentrant_flush.html => dom/base/test/test_reentrant_flush.html
rename : content/base/test/test_sync_xhr_timer.xhtml => dom/base/test/test_sync_xhr_timer.xhtml
rename : content/base/test/test_text_wholeText.html => dom/base/test/test_text_wholeText.html
rename : content/base/test/test_textnode_normalize_in_selection.html => dom/base/test/test_textnode_normalize_in_selection.html
rename : content/base/test/test_textnode_split_in_selection.html => dom/base/test/test_textnode_split_in_selection.html
rename : content/base/test/test_title.html => dom/base/test/test_title.html
rename : content/base/test/test_treewalker_nextsibling.xml => dom/base/test/test_treewalker_nextsibling.xml
rename : content/base/test/test_user_select.html => dom/base/test/test_user_select.html
rename : content/base/test/test_viewport_scroll.html => dom/base/test/test_viewport_scroll.html
rename : content/base/test/test_viewsource_forbidden_in_object.html => dom/base/test/test_viewsource_forbidden_in_object.html
rename : content/base/test/test_w3element_traversal.html => dom/base/test/test_w3element_traversal.html
rename : content/base/test/test_w3element_traversal.xhtml => dom/base/test/test_w3element_traversal.xhtml
rename : content/base/test/test_w3element_traversal_svg.html => dom/base/test/test_w3element_traversal_svg.html
rename : content/base/test/test_warning_for_blocked_cross_site_request.html => dom/base/test/test_warning_for_blocked_cross_site_request.html
rename : content/base/test/test_websocket.html => dom/base/test/test_websocket.html
rename : content/base/test/test_websocket_basic.html => dom/base/test/test_websocket_basic.html
rename : content/base/test/test_websocket_hello.html => dom/base/test/test_websocket_hello.html
rename : content/base/test/test_x-frame-options.html => dom/base/test/test_x-frame-options.html
rename : content/base/test/test_xbl_userdata.xhtml => dom/base/test/test_xbl_userdata.xhtml
rename : content/base/test/test_xhr_abort_after_load.html => dom/base/test/test_xhr_abort_after_load.html
rename : content/base/test/test_xhr_forbidden_headers.html => dom/base/test/test_xhr_forbidden_headers.html
rename : content/base/test/test_xhr_progressevents.html => dom/base/test/test_xhr_progressevents.html
rename : content/base/test/test_xhr_send_readystate.html => dom/base/test/test_xhr_send_readystate.html
rename : content/base/test/test_xhr_withCredentials.html => dom/base/test/test_xhr_withCredentials.html
rename : content/base/test/unit/1_original.xml => dom/base/test/unit/1_original.xml
rename : content/base/test/unit/1_result.xml => dom/base/test/unit/1_result.xml
rename : content/base/test/unit/2_original.xml => dom/base/test/unit/2_original.xml
rename : content/base/test/unit/2_result_1.xml => dom/base/test/unit/2_result_1.xml
rename : content/base/test/unit/2_result_2.xml => dom/base/test/unit/2_result_2.xml
rename : content/base/test/unit/2_result_3.xml => dom/base/test/unit/2_result_3.xml
rename : content/base/test/unit/2_result_4.xml => dom/base/test/unit/2_result_4.xml
rename : content/base/test/unit/3_original.xml => dom/base/test/unit/3_original.xml
rename : content/base/test/unit/3_result.xml => dom/base/test/unit/3_result.xml
rename : content/base/test/unit/3_result_2.xml => dom/base/test/unit/3_result_2.xml
rename : content/base/test/unit/4_original.xml => dom/base/test/unit/4_original.xml
rename : content/base/test/unit/4_result_1.xml => dom/base/test/unit/4_result_1.xml
rename : content/base/test/unit/4_result_2.xml => dom/base/test/unit/4_result_2.xml
rename : content/base/test/unit/4_result_3.xml => dom/base/test/unit/4_result_3.xml
rename : content/base/test/unit/4_result_4.xml => dom/base/test/unit/4_result_4.xml
rename : content/base/test/unit/4_result_5.xml => dom/base/test/unit/4_result_5.xml
rename : content/base/test/unit/4_result_6.xml => dom/base/test/unit/4_result_6.xml
rename : content/base/test/unit/head_utilities.js => dom/base/test/unit/head_utilities.js
rename : content/base/test/unit/test_bug553888.js => dom/base/test/unit/test_bug553888.js
rename : content/base/test/unit/test_bug737966.js => dom/base/test/unit/test_bug737966.js
rename : content/base/test/unit/test_cspreports.js => dom/base/test/unit/test_cspreports.js
rename : content/base/test/unit/test_error_codes.js => dom/base/test/unit/test_error_codes.js
rename : content/base/test/unit/test_thirdpartyutil.js => dom/base/test/unit/test_thirdpartyutil.js
rename : content/base/test/unit/test_xhr_document.js => dom/base/test/unit/test_xhr_document.js
rename : content/base/test/unit/test_xhr_standalone.js => dom/base/test/unit/test_xhr_standalone.js
rename : content/base/test/unit/test_xmlserializer.js => dom/base/test/unit/test_xmlserializer.js
rename : content/base/test/unit/xpcshell.ini => dom/base/test/unit/xpcshell.ini
rename : content/base/test/unit_ipc/test_bug553888_wrap.js => dom/base/test/unit_ipc/test_bug553888_wrap.js
rename : content/base/test/unit_ipc/test_xhr_document_ipc.js => dom/base/test/unit_ipc/test_xhr_document_ipc.js
rename : content/base/test/unit_ipc/xpcshell.ini => dom/base/test/unit_ipc/xpcshell.ini
rename : content/base/test/variable_style_sheet.sjs => dom/base/test/variable_style_sheet.sjs
rename : content/base/test/viewport_helpers.js => dom/base/test/viewport_helpers.js
rename : content/base/test/w3element_traversal.svg => dom/base/test/w3element_traversal.svg
rename : content/base/test/websocket_hybi/file_binary-frames_wsh.py => dom/base/test/websocket_hybi/file_binary-frames_wsh.py
rename : content/base/test/websocket_hybi/file_check-binary-messages_wsh.py => dom/base/test/websocket_hybi/file_check-binary-messages_wsh.py
rename : content/base/test/websocket_hybi/mochitest.ini => dom/base/test/websocket_hybi/mochitest.ini
rename : content/base/test/websocket_hybi/test_receive-arraybuffer.html => dom/base/test/websocket_hybi/test_receive-arraybuffer.html
rename : content/base/test/websocket_hybi/test_receive-blob.html => dom/base/test/websocket_hybi/test_receive-blob.html
rename : content/base/test/websocket_hybi/test_send-arraybuffer.html => dom/base/test/websocket_hybi/test_send-arraybuffer.html
rename : content/base/test/websocket_hybi/test_send-blob.html => dom/base/test/websocket_hybi/test_send-blob.html
rename : content/base/test/wholeTexty-helper.xml => dom/base/test/wholeTexty-helper.xml
2014-10-25 20:25:22 +03:00

2433 lines
62 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set sw=2 ts=8 et tw=80 : */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "WebSocket.h"
#include "mozilla/dom/WebSocketBinding.h"
#include "mozilla/net/WebSocketChannel.h"
#include "jsapi.h"
#include "jsfriendapi.h"
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/net/WebSocketChannel.h"
#include "mozilla/dom/File.h"
#include "mozilla/dom/ScriptSettings.h"
#include "mozilla/dom/WorkerPrivate.h"
#include "mozilla/dom/WorkerRunnable.h"
#include "mozilla/dom/WorkerScope.h"
#include "nsIScriptGlobalObject.h"
#include "nsIDOMWindow.h"
#include "nsIDocument.h"
#include "nsXPCOM.h"
#include "nsIXPConnect.h"
#include "nsContentUtils.h"
#include "nsError.h"
#include "nsIScriptObjectPrincipal.h"
#include "nsIURL.h"
#include "nsIUnicodeEncoder.h"
#include "nsThreadUtils.h"
#include "nsIDOMMessageEvent.h"
#include "nsIPromptFactory.h"
#include "nsIWindowWatcher.h"
#include "nsIPrompt.h"
#include "nsIStringBundle.h"
#include "nsIConsoleService.h"
#include "mozilla/dom/CloseEvent.h"
#include "nsICryptoHash.h"
#include "nsJSUtils.h"
#include "nsIScriptError.h"
#include "nsNetUtil.h"
#include "nsILoadGroup.h"
#include "mozilla/Preferences.h"
#include "xpcpublic.h"
#include "nsContentPolicyUtils.h"
#include "nsWrapperCacheInlines.h"
#include "nsIObserverService.h"
#include "nsIEventTarget.h"
#include "nsIInterfaceRequestor.h"
#include "nsIObserver.h"
#include "nsIRequest.h"
#include "nsIThreadRetargetableRequest.h"
#include "nsIWebSocketChannel.h"
#include "nsIWebSocketListener.h"
#include "nsProxyRelease.h"
#include "nsWeakReference.h"
using namespace mozilla::net;
using namespace mozilla::dom::workers;
namespace mozilla {
namespace dom {
class WebSocketImpl MOZ_FINAL : public nsIInterfaceRequestor
, public nsIWebSocketListener
, public nsIObserver
, public nsSupportsWeakReference
, public nsIRequest
, public nsIEventTarget
{
public:
NS_DECL_NSIINTERFACEREQUESTOR
NS_DECL_NSIWEBSOCKETLISTENER
NS_DECL_NSIOBSERVER
NS_DECL_NSIREQUEST
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIEVENTTARGET
WebSocketImpl(WebSocket* aWebSocket)
: mWebSocket(aWebSocket)
, mOnCloseScheduled(false)
, mFailed(false)
, mDisconnected(false)
, mCloseEventWasClean(false)
, mCloseEventCode(nsIWebSocketChannel::CLOSE_ABNORMAL)
, mScriptLine(0)
, mInnerWindowID(0)
, mWorkerPrivate(nullptr)
{
if (!NS_IsMainThread()) {
mWorkerPrivate = GetCurrentThreadWorkerPrivate();
MOZ_ASSERT(mWorkerPrivate);
}
}
void AssertIsOnTargetThread() const
{
MOZ_ASSERT(IsTargetThread());
}
bool IsTargetThread() const;
void Init(JSContext* aCx,
nsIPrincipal* aPrincipal,
const nsAString& aURL,
nsTArray<nsString>& aProtocolArray,
const nsACString& aScriptFile,
uint32_t aScriptLine,
ErrorResult& aRv,
bool* aConnectionFailed);
void AsyncOpen(ErrorResult& aRv);
nsresult ParseURL(const nsAString& aURL);
nsresult InitializeConnection();
// These methods when called can release the WebSocket object
void FailConnection(uint16_t reasonCode,
const nsACString& aReasonString = EmptyCString());
nsresult CloseConnection(uint16_t reasonCode,
const nsACString& aReasonString = EmptyCString());
nsresult Disconnect();
void DisconnectInternal();
nsresult ConsoleError();
nsresult PrintErrorOnConsole(const char* aBundleURI,
const char16_t* aError,
const char16_t** aFormatStrings,
uint32_t aFormatStringsLen);
nsresult DoOnMessageAvailable(const nsACString& aMsg,
bool isBinary);
// ConnectionCloseEvents: 'error' event if needed, then 'close' event.
// - These must not be dispatched while we are still within an incoming call
// from JS (ex: close()). Set 'sync' to false in that case to dispatch in a
// separate new event.
nsresult ScheduleConnectionCloseEvents(nsISupports* aContext,
nsresult aStatusCode,
bool sync);
// 2nd half of ScheduleConnectionCloseEvents, sometimes run in its own event.
void DispatchConnectionCloseEvents();
// Dispatch a runnable to the right thread.
nsresult DispatchRunnable(nsIRunnable* aRunnable);
nsresult UpdateURI();
void AddRefObject();
void ReleaseObject();
void UnregisterFeature();
nsresult CancelInternal();
nsRefPtr<WebSocket> mWebSocket;
nsCOMPtr<nsIWebSocketChannel> mChannel;
bool mSecure; // if true it is using SSL and the wss scheme,
// otherwise it is using the ws scheme with no SSL
bool mOnCloseScheduled;
bool mFailed;
bool mDisconnected;
// Set attributes of DOM 'onclose' message
bool mCloseEventWasClean;
nsString mCloseEventReason;
uint16_t mCloseEventCode;
nsCString mAsciiHost; // hostname
uint32_t mPort;
nsCString mResource; // [filepath[?query]]
nsString mUTF16Origin;
nsCString mURI;
nsCString mRequestedProtocolList;
nsCOMPtr<nsIPrincipal> mPrincipal;
nsWeakPtr mOriginDocument;
// Web Socket owner information:
// - the script file name, UTF8 encoded.
// - source code line number where the Web Socket object was constructed.
// - the ID of the inner window where the script lives. Note that this may not
// be the same as the Web Socket owner window.
// These attributes are used for error reporting.
nsCString mScriptFile;
uint32_t mScriptLine;
uint64_t mInnerWindowID;
WorkerPrivate* mWorkerPrivate;
nsAutoPtr<WorkerFeature> mWorkerFeature;
nsWeakPtr mWeakLoadGroup;
private:
~WebSocketImpl()
{
// If we threw during Init we never called disconnect
if (!mDisconnected) {
Disconnect();
}
}
};
NS_IMPL_ISUPPORTS(WebSocketImpl,
nsIInterfaceRequestor,
nsIWebSocketListener,
nsIObserver,
nsISupportsWeakReference,
nsIRequest,
nsIEventTarget)
class CallDispatchConnectionCloseEvents MOZ_FINAL : public nsRunnable
{
public:
explicit CallDispatchConnectionCloseEvents(WebSocketImpl* aWebSocketImpl)
: mWebSocketImpl(aWebSocketImpl)
{
aWebSocketImpl->AssertIsOnTargetThread();
}
NS_IMETHOD Run()
{
mWebSocketImpl->AssertIsOnTargetThread();
mWebSocketImpl->DispatchConnectionCloseEvents();
return NS_OK;
}
private:
nsRefPtr<WebSocketImpl> mWebSocketImpl;
};
//-----------------------------------------------------------------------------
// WebSocketImpl
//-----------------------------------------------------------------------------
namespace {
class PrintErrorOnConsoleRunnable MOZ_FINAL : public WorkerMainThreadRunnable
{
public:
PrintErrorOnConsoleRunnable(WebSocketImpl* aImpl,
const char* aBundleURI,
const char16_t* aError,
const char16_t** aFormatStrings,
uint32_t aFormatStringsLen)
: WorkerMainThreadRunnable(aImpl->mWorkerPrivate)
, mImpl(aImpl)
, mBundleURI(aBundleURI)
, mError(aError)
, mFormatStrings(aFormatStrings)
, mFormatStringsLen(aFormatStringsLen)
, mRv(NS_ERROR_FAILURE)
{ }
bool MainThreadRun() MOZ_OVERRIDE
{
mRv = mImpl->PrintErrorOnConsole(mBundleURI, mError, mFormatStrings,
mFormatStringsLen);
return true;
}
nsresult ErrorCode() const
{
return mRv;
}
private:
// Raw pointer because this runnable is sync.
WebSocketImpl* mImpl;
const char* mBundleURI;
const char16_t* mError;
const char16_t** mFormatStrings;
uint32_t mFormatStringsLen;
nsresult mRv;
};
} // anonymous namespace
nsresult
WebSocketImpl::PrintErrorOnConsole(const char *aBundleURI,
const char16_t *aError,
const char16_t **aFormatStrings,
uint32_t aFormatStringsLen)
{
// This method must run on the main thread.
if (!NS_IsMainThread()) {
nsRefPtr<PrintErrorOnConsoleRunnable> runnable =
new PrintErrorOnConsoleRunnable(this, aBundleURI, aError, aFormatStrings,
aFormatStringsLen);
runnable->Dispatch(mWorkerPrivate->GetJSContext());
return runnable->ErrorCode();
}
nsresult rv;
nsCOMPtr<nsIStringBundleService> bundleService =
do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIStringBundle> strBundle;
rv = bundleService->CreateBundle(aBundleURI, getter_AddRefs(strBundle));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIConsoleService> console(
do_GetService(NS_CONSOLESERVICE_CONTRACTID, &rv));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIScriptError> errorObject(
do_CreateInstance(NS_SCRIPTERROR_CONTRACTID, &rv));
NS_ENSURE_SUCCESS(rv, rv);
// Localize the error message
nsXPIDLString message;
if (aFormatStrings) {
rv = strBundle->FormatStringFromName(aError, aFormatStrings,
aFormatStringsLen,
getter_Copies(message));
} else {
rv = strBundle->GetStringFromName(aError, getter_Copies(message));
}
NS_ENSURE_SUCCESS(rv, rv);
rv = errorObject->InitWithWindowID(message,
NS_ConvertUTF8toUTF16(mScriptFile),
EmptyString(), mScriptLine, 0,
nsIScriptError::errorFlag, "Web Socket",
mInnerWindowID);
NS_ENSURE_SUCCESS(rv, rv);
// print the error message directly to the JS console
rv = console->LogMessage(errorObject);
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
namespace {
class CloseRunnable MOZ_FINAL : public WorkerMainThreadRunnable
{
public:
CloseRunnable(WebSocketImpl* aImpl, uint16_t aReasonCode,
const nsACString& aReasonString)
: WorkerMainThreadRunnable(aImpl->mWorkerPrivate)
, mImpl(aImpl)
, mReasonCode(aReasonCode)
, mReasonString(aReasonString)
, mRv(NS_ERROR_FAILURE)
{ }
bool MainThreadRun() MOZ_OVERRIDE
{
mRv = mImpl->mChannel->Close(mReasonCode, mReasonString);
return true;
}
nsresult ErrorCode() const
{
return mRv;
}
private:
// A raw pointer because this runnable is sync.
WebSocketImpl* mImpl;
uint16_t mReasonCode;
const nsACString& mReasonString;
nsresult mRv;
};
} // anonymous namespace
nsresult
WebSocketImpl::CloseConnection(uint16_t aReasonCode,
const nsACString& aReasonString)
{
AssertIsOnTargetThread();
uint16_t readyState = mWebSocket->ReadyState();
if (readyState == WebSocket::CLOSING ||
readyState == WebSocket::CLOSED) {
return NS_OK;
}
// The common case...
if (mChannel) {
mWebSocket->SetReadyState(WebSocket::CLOSING);
// The channel has to be closed on the main-thread.
if (NS_IsMainThread()) {
return mChannel->Close(aReasonCode, aReasonString);
}
nsRefPtr<CloseRunnable> runnable =
new CloseRunnable(this, aReasonCode, aReasonString);
runnable->Dispatch(mWorkerPrivate->GetJSContext());
return runnable->ErrorCode();
}
// No channel, but not disconnected: canceled or failed early
//
MOZ_ASSERT(readyState == WebSocket::CONNECTING,
"Should only get here for early websocket cancel/error");
// Server won't be sending us a close code, so use what's passed in here.
mCloseEventCode = aReasonCode;
CopyUTF8toUTF16(aReasonString, mCloseEventReason);
mWebSocket->SetReadyState(WebSocket::CLOSING);
// Can be called from Cancel() or Init() codepaths, so need to dispatch
// onerror/onclose asynchronously
ScheduleConnectionCloseEvents(
nullptr,
(aReasonCode == nsIWebSocketChannel::CLOSE_NORMAL ||
aReasonCode == nsIWebSocketChannel::CLOSE_GOING_AWAY) ?
NS_OK : NS_ERROR_FAILURE,
false);
return NS_OK;
}
nsresult
WebSocketImpl::ConsoleError()
{
AssertIsOnTargetThread();
NS_ConvertUTF8toUTF16 specUTF16(mURI);
const char16_t* formatStrings[] = { specUTF16.get() };
if (mWebSocket->ReadyState() < WebSocket::OPEN) {
PrintErrorOnConsole("chrome://global/locale/appstrings.properties",
MOZ_UTF16("connectionFailure"),
formatStrings, ArrayLength(formatStrings));
} else {
PrintErrorOnConsole("chrome://global/locale/appstrings.properties",
MOZ_UTF16("netInterrupt"),
formatStrings, ArrayLength(formatStrings));
}
/// todo some specific errors - like for message too large
return NS_OK;
}
void
WebSocketImpl::FailConnection(uint16_t aReasonCode,
const nsACString& aReasonString)
{
AssertIsOnTargetThread();
ConsoleError();
mFailed = true;
CloseConnection(aReasonCode, aReasonString);
}
namespace {
class DisconnectInternalRunnable MOZ_FINAL : public WorkerMainThreadRunnable
{
public:
DisconnectInternalRunnable(WebSocketImpl* aImpl)
: WorkerMainThreadRunnable(aImpl->mWorkerPrivate)
, mImpl(aImpl)
{ }
bool MainThreadRun() MOZ_OVERRIDE
{
mImpl->DisconnectInternal();
return true;
}
private:
// A raw pointer because this runnable is sync.
WebSocketImpl* mImpl;
};
} // anonymous namespace
nsresult
WebSocketImpl::Disconnect()
{
if (mDisconnected) {
return NS_OK;
}
AssertIsOnTargetThread();
// DisconnectInternal touches observers and nsILoadGroup and it must run on
// the main thread.
if (NS_IsMainThread()) {
DisconnectInternal();
} else {
nsRefPtr<DisconnectInternalRunnable> runnable =
new DisconnectInternalRunnable(this);
runnable->Dispatch(mWorkerPrivate->GetJSContext());
}
// DontKeepAliveAnyMore() can release the object. So hold a reference to this
// until the end of the method.
nsRefPtr<WebSocketImpl> kungfuDeathGrip = this;
if (mWorkerPrivate && mWorkerFeature) {
UnregisterFeature();
}
nsCOMPtr<nsIThread> mainThread;
if (NS_FAILED(NS_GetMainThread(getter_AddRefs(mainThread))) ||
NS_FAILED(NS_ProxyRelease(mainThread, mChannel))) {
NS_WARNING("Failed to proxy release of channel, leaking instead!");
}
mDisconnected = true;
mWebSocket->DontKeepAliveAnyMore();
mWebSocket->mImpl = nullptr;
// We want to release the WebSocket in the correct thread.
mWebSocket = nullptr;
return NS_OK;
}
void
WebSocketImpl::DisconnectInternal()
{
AssertIsOnMainThread();
nsCOMPtr<nsILoadGroup> loadGroup = do_QueryReferent(mWeakLoadGroup);
if (loadGroup) {
loadGroup->RemoveRequest(this, nullptr, NS_OK);
}
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (os) {
os->RemoveObserver(this, DOM_WINDOW_DESTROYED_TOPIC);
os->RemoveObserver(this, DOM_WINDOW_FROZEN_TOPIC);
}
}
//-----------------------------------------------------------------------------
// WebSocketImpl::nsIWebSocketListener methods:
//-----------------------------------------------------------------------------
nsresult
WebSocketImpl::DoOnMessageAvailable(const nsACString& aMsg, bool isBinary)
{
AssertIsOnTargetThread();
int16_t readyState = mWebSocket->ReadyState();
if (readyState == WebSocket::CLOSED) {
NS_ERROR("Received message after CLOSED");
return NS_ERROR_UNEXPECTED;
}
if (readyState == WebSocket::OPEN) {
// Dispatch New Message
nsresult rv = mWebSocket->CreateAndDispatchMessageEvent(aMsg, isBinary);
if (NS_FAILED(rv)) {
NS_WARNING("Failed to dispatch the message event");
}
} else {
// CLOSING should be the only other state where it's possible to get msgs
// from channel: Spec says to drop them.
MOZ_ASSERT(readyState == WebSocket::CLOSING,
"Received message while CONNECTING or CLOSED");
}
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::OnMessageAvailable(nsISupports* aContext,
const nsACString& aMsg)
{
AssertIsOnTargetThread();
return DoOnMessageAvailable(aMsg, false);
}
NS_IMETHODIMP
WebSocketImpl::OnBinaryMessageAvailable(nsISupports* aContext,
const nsACString& aMsg)
{
AssertIsOnTargetThread();
return DoOnMessageAvailable(aMsg, true);
}
NS_IMETHODIMP
WebSocketImpl::OnStart(nsISupports* aContext)
{
AssertIsOnTargetThread();
int16_t readyState = mWebSocket->ReadyState();
// This is the only function that sets OPEN, and should be called only once
MOZ_ASSERT(readyState != WebSocket::OPEN,
"readyState already OPEN! OnStart called twice?");
// Nothing to do if we've already closed/closing
if (readyState != WebSocket::CONNECTING) {
return NS_OK;
}
// Attempt to kill "ghost" websocket: but usually too early for check to fail
nsresult rv = mWebSocket->CheckInnerWindowCorrectness();
if (NS_FAILED(rv)) {
CloseConnection(nsIWebSocketChannel::CLOSE_GOING_AWAY);
return rv;
}
if (!mRequestedProtocolList.IsEmpty()) {
mChannel->GetProtocol(mWebSocket->mEstablishedProtocol);
}
mChannel->GetExtensions(mWebSocket->mEstablishedExtensions);
UpdateURI();
mWebSocket->SetReadyState(WebSocket::OPEN);
// Call 'onopen'
rv = mWebSocket->CreateAndDispatchSimpleEvent(NS_LITERAL_STRING("open"));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to dispatch the open event");
}
mWebSocket->UpdateMustKeepAlive();
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::OnStop(nsISupports* aContext, nsresult aStatusCode)
{
AssertIsOnTargetThread();
// We can be CONNECTING here if connection failed.
// We can be OPEN if we have encountered a fatal protocol error
// We can be CLOSING if close() was called and/or server initiated close.
MOZ_ASSERT(mWebSocket->ReadyState() != WebSocket::CLOSED,
"Shouldn't already be CLOSED when OnStop called");
// called by network stack, not JS, so can dispatch JS events synchronously
return ScheduleConnectionCloseEvents(aContext, aStatusCode, true);
}
nsresult
WebSocketImpl::ScheduleConnectionCloseEvents(nsISupports* aContext,
nsresult aStatusCode,
bool sync)
{
AssertIsOnTargetThread();
// no-op if some other code has already initiated close event
if (!mOnCloseScheduled) {
mCloseEventWasClean = NS_SUCCEEDED(aStatusCode);
if (aStatusCode == NS_BASE_STREAM_CLOSED) {
// don't generate an error event just because of an unclean close
aStatusCode = NS_OK;
}
if (NS_FAILED(aStatusCode)) {
ConsoleError();
mFailed = true;
}
mOnCloseScheduled = true;
if (sync) {
DispatchConnectionCloseEvents();
} else {
NS_DispatchToCurrentThread(new CallDispatchConnectionCloseEvents(this));
}
}
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::OnAcknowledge(nsISupports *aContext, uint32_t aSize)
{
AssertIsOnTargetThread();
if (aSize > mWebSocket->mOutgoingBufferedAmount) {
return NS_ERROR_UNEXPECTED;
}
mWebSocket->mOutgoingBufferedAmount -= aSize;
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::OnServerClose(nsISupports *aContext, uint16_t aCode,
const nsACString &aReason)
{
AssertIsOnTargetThread();
int16_t readyState = mWebSocket->ReadyState();
MOZ_ASSERT(readyState != WebSocket::CONNECTING,
"Received server close before connected?");
MOZ_ASSERT(readyState != WebSocket::CLOSED,
"Received server close after already closed!");
// store code/string for onclose DOM event
mCloseEventCode = aCode;
CopyUTF8toUTF16(aReason, mCloseEventReason);
if (readyState == WebSocket::OPEN) {
// Server initiating close.
// RFC 6455, 5.5.1: "When sending a Close frame in response, the endpoint
// typically echos the status code it received".
// But never send certain codes, per section 7.4.1
if (aCode == 1005 || aCode == 1006 || aCode == 1015) {
CloseConnection(0, EmptyCString());
} else {
CloseConnection(aCode, aReason);
}
} else {
// We initiated close, and server has replied: OnStop does rest of the work.
MOZ_ASSERT(readyState == WebSocket::CLOSING, "unknown state");
}
return NS_OK;
}
//-----------------------------------------------------------------------------
// WebSocketImpl::nsIInterfaceRequestor
//-----------------------------------------------------------------------------
NS_IMETHODIMP
WebSocketImpl::GetInterface(const nsIID& aIID, void** aResult)
{
AssertIsOnMainThread();
if (!mWebSocket || mWebSocket->ReadyState() == WebSocket::CLOSED) {
return NS_ERROR_FAILURE;
}
if (aIID.Equals(NS_GET_IID(nsIAuthPrompt)) ||
aIID.Equals(NS_GET_IID(nsIAuthPrompt2))) {
nsresult rv;
nsIScriptContext* sc = mWebSocket->GetContextForEventHandlers(&rv);
nsCOMPtr<nsIDocument> doc =
nsContentUtils::GetDocumentFromScriptContext(sc);
if (!doc) {
return NS_ERROR_NOT_AVAILABLE;
}
nsCOMPtr<nsIPromptFactory> wwatch =
do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsPIDOMWindow> outerWindow = doc->GetWindow();
return wwatch->GetPrompt(outerWindow, aIID, aResult);
}
return QueryInterface(aIID, aResult);
}
////////////////////////////////////////////////////////////////////////////////
// WebSocket
////////////////////////////////////////////////////////////////////////////////
WebSocket::WebSocket(nsPIDOMWindow* aOwnerWindow)
: DOMEventTargetHelper(aOwnerWindow)
, mWorkerPrivate(nullptr)
, mKeepingAlive(false)
, mCheckMustKeepAlive(true)
, mOutgoingBufferedAmount(0)
, mBinaryType(dom::BinaryType::Blob)
, mMutex("WebSocketImpl::mMutex")
, mReadyState(CONNECTING)
{
mImpl = new WebSocketImpl(this);
mWorkerPrivate = mImpl->mWorkerPrivate;
}
WebSocket::~WebSocket()
{
}
JSObject*
WebSocket::WrapObject(JSContext* cx)
{
return WebSocketBinding::Wrap(cx, this);
}
//---------------------------------------------------------------------------
// WebIDL
//---------------------------------------------------------------------------
// Constructor:
already_AddRefed<WebSocket>
WebSocket::Constructor(const GlobalObject& aGlobal,
const nsAString& aUrl,
ErrorResult& aRv)
{
Sequence<nsString> protocols;
return WebSocket::Constructor(aGlobal, aUrl, protocols, aRv);
}
already_AddRefed<WebSocket>
WebSocket::Constructor(const GlobalObject& aGlobal,
const nsAString& aUrl,
const nsAString& aProtocol,
ErrorResult& aRv)
{
Sequence<nsString> protocols;
protocols.AppendElement(aProtocol);
return WebSocket::Constructor(aGlobal, aUrl, protocols, aRv);
}
namespace {
// This class is used to clear any exception.
class MOZ_STACK_CLASS ClearException
{
public:
explicit ClearException(JSContext* aCx)
: mCx(aCx)
{
}
~ClearException()
{
JS_ClearPendingException(mCx);
}
private:
JSContext* mCx;
};
class InitRunnable MOZ_FINAL : public WorkerMainThreadRunnable
{
public:
InitRunnable(WebSocketImpl* aImpl, const nsAString& aURL,
nsTArray<nsString>& aProtocolArray,
const nsACString& aScriptFile, uint32_t aScriptLine,
ErrorResult& aRv, bool* aConnectionFailed)
: WorkerMainThreadRunnable(aImpl->mWorkerPrivate)
, mImpl(aImpl)
, mURL(aURL)
, mProtocolArray(aProtocolArray)
, mScriptFile(aScriptFile)
, mScriptLine(aScriptLine)
, mRv(aRv)
, mConnectionFailed(aConnectionFailed)
{
MOZ_ASSERT(mWorkerPrivate);
mWorkerPrivate->AssertIsOnWorkerThread();
}
bool MainThreadRun() MOZ_OVERRIDE
{
AssertIsOnMainThread();
// Walk up to our containing page
WorkerPrivate* wp = mWorkerPrivate;
while (wp->GetParent()) {
wp = wp->GetParent();
}
nsPIDOMWindow* window = wp->GetWindow();
if (!window) {
mRv.Throw(NS_ERROR_FAILURE);
return true;
}
AutoJSAPI jsapi;
if (NS_WARN_IF(!jsapi.Init(window))) {
mRv.Throw(NS_ERROR_FAILURE);
return true;
}
ClearException ce(jsapi.cx());
nsIDocument* doc = window->GetExtantDoc();
if (!doc) {
mRv.Throw(NS_ERROR_FAILURE);
return true;
}
nsCOMPtr<nsIPrincipal> principal = doc->NodePrincipal();
if (!principal) {
mRv.Throw(NS_ERROR_FAILURE);
return true;
}
mImpl->Init(jsapi.cx(), principal, mURL, mProtocolArray, mScriptFile,
mScriptLine, mRv, mConnectionFailed);
return true;
}
private:
// Raw pointer. This worker runs synchronously.
WebSocketImpl* mImpl;
const nsAString& mURL;
nsTArray<nsString>& mProtocolArray;
nsCString mScriptFile;
uint32_t mScriptLine;
ErrorResult& mRv;
bool* mConnectionFailed;
};
class AsyncOpenRunnable MOZ_FINAL : public WorkerMainThreadRunnable
{
public:
AsyncOpenRunnable(WebSocketImpl* aImpl, ErrorResult& aRv)
: WorkerMainThreadRunnable(aImpl->mWorkerPrivate)
, mImpl(aImpl)
, mRv(aRv)
{
MOZ_ASSERT(mWorkerPrivate);
mWorkerPrivate->AssertIsOnWorkerThread();
}
bool MainThreadRun() MOZ_OVERRIDE
{
AssertIsOnMainThread();
mImpl->AsyncOpen(mRv);
return true;
}
private:
// Raw pointer. This worker runs synchronously.
WebSocketImpl* mImpl;
ErrorResult& mRv;
};
} // anonymous namespace
already_AddRefed<WebSocket>
WebSocket::Constructor(const GlobalObject& aGlobal,
const nsAString& aUrl,
const Sequence<nsString>& aProtocols,
ErrorResult& aRv)
{
nsCOMPtr<nsIPrincipal> principal;
nsCOMPtr<nsPIDOMWindow> ownerWindow;
if (NS_IsMainThread()) {
nsCOMPtr<nsIScriptObjectPrincipal> scriptPrincipal =
do_QueryInterface(aGlobal.GetAsSupports());
if (!scriptPrincipal) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
principal = scriptPrincipal->GetPrincipal();
if (!principal) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
nsCOMPtr<nsIScriptGlobalObject> sgo =
do_QueryInterface(aGlobal.GetAsSupports());
if (!sgo) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
ownerWindow = do_QueryInterface(aGlobal.GetAsSupports());
if (!ownerWindow) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
}
nsTArray<nsString> protocolArray;
for (uint32_t index = 0, len = aProtocols.Length(); index < len; ++index) {
const nsString& protocolElement = aProtocols[index];
if (protocolElement.IsEmpty()) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return nullptr;
}
if (protocolArray.Contains(protocolElement)) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return nullptr;
}
if (protocolElement.FindChar(',') != -1) /* interferes w/list */ {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return nullptr;
}
protocolArray.AppendElement(protocolElement);
}
nsRefPtr<WebSocket> webSocket = new WebSocket(ownerWindow);
nsRefPtr<WebSocketImpl> kungfuDeathGrip = webSocket->mImpl;
bool connectionFailed = true;
if (NS_IsMainThread()) {
webSocket->mImpl->Init(aGlobal.Context(), principal, aUrl, protocolArray,
EmptyCString(), 0, aRv, &connectionFailed);
} else {
unsigned lineno;
JS::AutoFilename file;
if (!JS::DescribeScriptedCaller(aGlobal.Context(), &file, &lineno)) {
NS_WARNING("Failed to get line number and filename in workers.");
}
nsRefPtr<InitRunnable> runnable =
new InitRunnable(webSocket->mImpl, aUrl, protocolArray,
nsAutoCString(file.get()), lineno, aRv,
&connectionFailed);
runnable->Dispatch(aGlobal.Context());
}
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
// We don't return an error if the connection just failed. Instead we dispatch
// an event.
if (connectionFailed) {
webSocket->mImpl->FailConnection(nsIWebSocketChannel::CLOSE_ABNORMAL);
}
// If we don't have a channel, the connection is failed and onerror() will be
// called asynchrounsly.
if (!webSocket->mImpl->mChannel) {
return webSocket.forget();
}
class MOZ_STACK_CLASS ClearWebSocket
{
public:
ClearWebSocket(WebSocketImpl* aWebSocketImpl)
: mWebSocketImpl(aWebSocketImpl)
, mDone(false)
{
}
void Done()
{
mDone = true;
}
~ClearWebSocket()
{
if (!mDone) {
mWebSocketImpl->mChannel = nullptr;
mWebSocketImpl->FailConnection(nsIWebSocketChannel::CLOSE_ABNORMAL);
}
}
WebSocketImpl* mWebSocketImpl;
bool mDone;
};
ClearWebSocket cws(webSocket->mImpl);
// This operation must be done on the correct thread. The rest must run on the
// main-thread.
aRv = webSocket->mImpl->mChannel->SetNotificationCallbacks(webSocket->mImpl);
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
if (NS_IsMainThread()) {
webSocket->mImpl->AsyncOpen(aRv);
} else {
nsRefPtr<AsyncOpenRunnable> runnable =
new AsyncOpenRunnable(webSocket->mImpl, aRv);
runnable->Dispatch(aGlobal.Context());
}
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
cws.Done();
return webSocket.forget();
}
NS_IMPL_CYCLE_COLLECTION_CLASS(WebSocket)
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(WebSocket)
bool isBlack = tmp->IsBlack();
if (isBlack || tmp->mKeepingAlive) {
if (tmp->mListenerManager) {
tmp->mListenerManager->MarkForCC();
}
if (!isBlack && tmp->PreservingWrapper()) {
// This marks the wrapper black.
tmp->GetWrapper();
}
return true;
}
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(WebSocket)
return tmp->IsBlack();
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_END
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_BEGIN(WebSocket)
return tmp->IsBlack();
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_END
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(WebSocket,
DOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_TRACE_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(WebSocket,
DOMEventTargetHelper)
if (tmp->mImpl) {
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mImpl->mPrincipal)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mImpl->mChannel)
}
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(WebSocket,
DOMEventTargetHelper)
if (tmp->mImpl) {
NS_IMPL_CYCLE_COLLECTION_UNLINK(mImpl->mPrincipal)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mImpl->mChannel)
tmp->mImpl->Disconnect();
MOZ_ASSERT(!tmp->mImpl);
}
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(WebSocket)
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
NS_IMPL_ADDREF_INHERITED(WebSocket, DOMEventTargetHelper)
NS_IMPL_RELEASE_INHERITED(WebSocket, DOMEventTargetHelper)
void
WebSocket::DisconnectFromOwner()
{
AssertIsOnMainThread();
DOMEventTargetHelper::DisconnectFromOwner();
if (mImpl) {
mImpl->CloseConnection(nsIWebSocketChannel::CLOSE_GOING_AWAY);
}
DontKeepAliveAnyMore();
}
//-----------------------------------------------------------------------------
// WebSocketImpl:: initialization
//-----------------------------------------------------------------------------
void
WebSocketImpl::Init(JSContext* aCx,
nsIPrincipal* aPrincipal,
const nsAString& aURL,
nsTArray<nsString>& aProtocolArray,
const nsACString& aScriptFile,
uint32_t aScriptLine,
ErrorResult& aRv,
bool* aConnectionFailed)
{
AssertIsOnMainThread();
MOZ_ASSERT(aPrincipal);
// We need to keep the implementation alive in case the init disconnects it
// because of some error.
nsRefPtr<WebSocketImpl> kungfuDeathGrip = this;
mPrincipal = aPrincipal;
// Attempt to kill "ghost" websocket: but usually too early for check to fail
aRv = mWebSocket->CheckInnerWindowCorrectness();
if (NS_WARN_IF(aRv.Failed())) {
return;
}
// Shut down websocket if window is frozen or destroyed (only needed for
// "ghost" websockets--see bug 696085)
if (!mWorkerPrivate) {
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (NS_WARN_IF(!os)) {
aRv.Throw(NS_ERROR_FAILURE);
return;
}
aRv = os->AddObserver(this, DOM_WINDOW_DESTROYED_TOPIC, true);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
aRv = os->AddObserver(this, DOM_WINDOW_FROZEN_TOPIC, true);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
}
if (mWorkerPrivate) {
mScriptFile = aScriptFile;
mScriptLine = aScriptLine;
} else {
unsigned lineno;
JS::AutoFilename file;
if (JS::DescribeScriptedCaller(aCx, &file, &lineno)) {
mScriptFile = file.get();
mScriptLine = lineno;
}
}
// Get WindowID
mInnerWindowID = nsJSUtils::GetCurrentlyRunningCodeInnerWindowID(aCx);
// parses the url
aRv = ParseURL(PromiseFlatString(aURL));
if (NS_WARN_IF(aRv.Failed())) {
return;
}
nsIScriptContext* sc = nullptr;
{
nsresult rv;
sc = mWebSocket->GetContextForEventHandlers(&rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
aRv.Throw(rv);
return;
}
}
// Don't allow https:// to open ws://
if (!mSecure &&
!Preferences::GetBool("network.websocket.allowInsecureFromHTTPS",
false)) {
// Confirmed we are opening plain ws:// and want to prevent this from a
// secure context (e.g. https). Check the principal's uri to determine if
// we were loaded from https.
nsCOMPtr<nsIGlobalObject> globalObject(GetEntryGlobal());
if (globalObject) {
nsCOMPtr<nsIPrincipal> principal(globalObject->PrincipalOrNull());
if (principal) {
nsCOMPtr<nsIURI> uri;
principal->GetURI(getter_AddRefs(uri));
if (uri) {
bool originIsHttps = false;
aRv = uri->SchemeIs("https", &originIsHttps);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
if (originIsHttps) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
}
}
}
}
// Assign the sub protocol list and scan it for illegal values
for (uint32_t index = 0; index < aProtocolArray.Length(); ++index) {
for (uint32_t i = 0; i < aProtocolArray[index].Length(); ++i) {
if (aProtocolArray[index][i] < static_cast<char16_t>(0x0021) ||
aProtocolArray[index][i] > static_cast<char16_t>(0x007E)) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return;
}
}
if (!mRequestedProtocolList.IsEmpty()) {
mRequestedProtocolList.AppendLiteral(", ");
}
AppendUTF16toUTF8(aProtocolArray[index], mRequestedProtocolList);
}
nsCOMPtr<nsIURI> uri;
{
nsresult rv = NS_NewURI(getter_AddRefs(uri), mURI);
// We crash here because we are sure that mURI is a valid URI, so either we
// are OOM'ing or something else bad is happening.
if (NS_FAILED(rv)) {
MOZ_CRASH();
}
}
// Check content policy.
int16_t shouldLoad = nsIContentPolicy::ACCEPT;
nsCOMPtr<nsIDocument> originDoc = nsContentUtils::GetDocumentFromScriptContext(sc);
mOriginDocument = do_GetWeakReference(originDoc);
aRv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_WEBSOCKET,
uri,
mPrincipal,
originDoc,
EmptyCString(),
nullptr,
&shouldLoad,
nsContentUtils::GetContentPolicy(),
nsContentUtils::GetSecurityManager());
if (NS_WARN_IF(aRv.Failed())) {
return;
}
if (NS_CP_REJECTED(shouldLoad)) {
// Disallowed by content policy.
aRv.Throw(NS_ERROR_CONTENT_BLOCKED);
return;
}
// the constructor should throw a SYNTAX_ERROR only if it fails to parse the
// url parameter, so don't throw if InitializeConnection fails, and call
// onerror/onclose asynchronously
if (NS_FAILED(InitializeConnection())) {
*aConnectionFailed = true;
} else {
*aConnectionFailed = false;
}
}
void
WebSocketImpl::AsyncOpen(ErrorResult& aRv)
{
NS_ABORT_IF_FALSE(NS_IsMainThread(), "Not running on main thread");
nsCString asciiOrigin;
aRv = nsContentUtils::GetASCIIOrigin(mPrincipal, asciiOrigin);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
ToLowerCase(asciiOrigin);
nsCOMPtr<nsIURI> uri;
aRv = NS_NewURI(getter_AddRefs(uri), mURI);
MOZ_ASSERT(!aRv.Failed());
aRv = mChannel->AsyncOpen(uri, asciiOrigin, this, nullptr);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
}
//-----------------------------------------------------------------------------
// WebSocketImpl methods:
//-----------------------------------------------------------------------------
class nsAutoCloseWS MOZ_FINAL
{
public:
explicit nsAutoCloseWS(WebSocketImpl* aWebSocketImpl)
: mWebSocketImpl(aWebSocketImpl)
{}
~nsAutoCloseWS()
{
if (!mWebSocketImpl->mChannel) {
mWebSocketImpl->CloseConnection(nsIWebSocketChannel::CLOSE_INTERNAL_ERROR);
}
}
private:
nsRefPtr<WebSocketImpl> mWebSocketImpl;
};
nsresult
WebSocketImpl::InitializeConnection()
{
AssertIsOnMainThread();
NS_ABORT_IF_FALSE(!mChannel, "mChannel should be null");
nsCOMPtr<nsIWebSocketChannel> wsChannel;
nsAutoCloseWS autoClose(this);
nsresult rv;
if (mSecure) {
wsChannel =
do_CreateInstance("@mozilla.org/network/protocol;1?name=wss", &rv);
} else {
wsChannel =
do_CreateInstance("@mozilla.org/network/protocol;1?name=ws", &rv);
}
NS_ENSURE_SUCCESS(rv, rv);
// add ourselves to the document's load group and
// provide the http stack the loadgroup info too
nsCOMPtr<nsILoadGroup> loadGroup;
rv = GetLoadGroup(getter_AddRefs(loadGroup));
if (loadGroup) {
rv = wsChannel->SetLoadGroup(loadGroup);
NS_ENSURE_SUCCESS(rv, rv);
rv = loadGroup->AddRequest(this, nullptr);
NS_ENSURE_SUCCESS(rv, rv);
mWeakLoadGroup = do_GetWeakReference(loadGroup);
}
// manually adding loadinfo to the channel since it
// was not set during channel creation.
nsCOMPtr<nsIDocument> doc = do_QueryReferent(mOriginDocument);
nsCOMPtr<nsILoadInfo> loadInfo =
new LoadInfo(mPrincipal,
doc,
nsILoadInfo::SEC_NORMAL,
nsIContentPolicy::TYPE_WEBSOCKET);
rv = wsChannel->SetLoadInfo(loadInfo);
NS_ENSURE_SUCCESS(rv, rv);
if (!mRequestedProtocolList.IsEmpty()) {
rv = wsChannel->SetProtocol(mRequestedProtocolList);
NS_ENSURE_SUCCESS(rv, rv);
}
nsCOMPtr<nsIThreadRetargetableRequest> rr = do_QueryInterface(wsChannel);
NS_ENSURE_TRUE(rr, NS_ERROR_FAILURE);
rv = rr->RetargetDeliveryTo(this);
NS_ENSURE_SUCCESS(rv, rv);
mChannel = wsChannel;
return NS_OK;
}
void
WebSocketImpl::DispatchConnectionCloseEvents()
{
AssertIsOnTargetThread();
mWebSocket->SetReadyState(WebSocket::CLOSED);
// Call 'onerror' if needed
if (mFailed) {
nsresult rv =
mWebSocket->CreateAndDispatchSimpleEvent(NS_LITERAL_STRING("error"));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to dispatch the error event");
}
}
nsresult rv = mWebSocket->CreateAndDispatchCloseEvent(mCloseEventWasClean,
mCloseEventCode,
mCloseEventReason);
if (NS_FAILED(rv)) {
NS_WARNING("Failed to dispatch the close event");
}
mWebSocket->UpdateMustKeepAlive();
Disconnect();
}
nsresult
WebSocket::CreateAndDispatchSimpleEvent(const nsAString& aName)
{
MOZ_ASSERT(mImpl);
AssertIsOnTargetThread();
nsresult rv = CheckInnerWindowCorrectness();
if (NS_FAILED(rv)) {
return NS_OK;
}
nsCOMPtr<nsIDOMEvent> event;
rv = NS_NewDOMEvent(getter_AddRefs(event), this, nullptr, nullptr);
NS_ENSURE_SUCCESS(rv, rv);
// it doesn't bubble, and it isn't cancelable
rv = event->InitEvent(aName, false, false);
NS_ENSURE_SUCCESS(rv, rv);
event->SetTrusted(true);
return DispatchDOMEvent(nullptr, event, nullptr, nullptr);
}
nsresult
WebSocket::CreateAndDispatchMessageEvent(const nsACString& aData,
bool aIsBinary)
{
MOZ_ASSERT(mImpl);
AssertIsOnTargetThread();
AutoJSAPI jsapi;
if (NS_IsMainThread()) {
if (NS_WARN_IF(!jsapi.Init(GetOwner()))) {
return NS_ERROR_FAILURE;
}
} else {
MOZ_ASSERT(mWorkerPrivate);
if (NS_WARN_IF(!jsapi.Init(mWorkerPrivate->GlobalScope()))) {
return NS_ERROR_FAILURE;
}
}
return CreateAndDispatchMessageEvent(jsapi.cx(), aData, aIsBinary);
}
nsresult
WebSocket::CreateAndDispatchMessageEvent(JSContext* aCx,
const nsACString& aData,
bool aIsBinary)
{
MOZ_ASSERT(mImpl);
AssertIsOnTargetThread();
nsresult rv = CheckInnerWindowCorrectness();
if (NS_FAILED(rv)) {
return NS_OK;
}
// Create appropriate JS object for message
JS::Rooted<JS::Value> jsData(aCx);
if (aIsBinary) {
if (mBinaryType == dom::BinaryType::Blob) {
nsresult rv = nsContentUtils::CreateBlobBuffer(aCx, GetOwner(), aData,
&jsData);
NS_ENSURE_SUCCESS(rv, rv);
} else if (mBinaryType == dom::BinaryType::Arraybuffer) {
JS::Rooted<JSObject*> arrayBuf(aCx);
nsresult rv = nsContentUtils::CreateArrayBuffer(aCx, aData,
arrayBuf.address());
NS_ENSURE_SUCCESS(rv, rv);
jsData = OBJECT_TO_JSVAL(arrayBuf);
} else {
NS_RUNTIMEABORT("Unknown binary type!");
return NS_ERROR_UNEXPECTED;
}
} else {
// JS string
NS_ConvertUTF8toUTF16 utf16Data(aData);
JSString* jsString;
jsString = JS_NewUCStringCopyN(aCx, utf16Data.get(), utf16Data.Length());
NS_ENSURE_TRUE(jsString, NS_ERROR_FAILURE);
jsData = STRING_TO_JSVAL(jsString);
}
// create an event that uses the MessageEvent interface,
// which does not bubble, is not cancelable, and has no default action
nsCOMPtr<nsIDOMEvent> event;
rv = NS_NewDOMMessageEvent(getter_AddRefs(event), this, nullptr, nullptr);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIDOMMessageEvent> messageEvent = do_QueryInterface(event);
rv = messageEvent->InitMessageEvent(NS_LITERAL_STRING("message"),
false, false,
jsData,
mImpl->mUTF16Origin,
EmptyString(), nullptr);
NS_ENSURE_SUCCESS(rv, rv);
event->SetTrusted(true);
return DispatchDOMEvent(nullptr, event, nullptr, nullptr);
}
nsresult
WebSocket::CreateAndDispatchCloseEvent(bool aWasClean,
uint16_t aCode,
const nsAString &aReason)
{
MOZ_ASSERT(mImpl);
AssertIsOnTargetThread();
nsresult rv = CheckInnerWindowCorrectness();
if (NS_FAILED(rv)) {
return NS_OK;
}
CloseEventInit init;
init.mBubbles = false;
init.mCancelable = false;
init.mWasClean = aWasClean;
init.mCode = aCode;
init.mReason = aReason;
nsRefPtr<CloseEvent> event =
CloseEvent::Constructor(this, NS_LITERAL_STRING("close"), init);
event->SetTrusted(true);
return DispatchDOMEvent(nullptr, event, nullptr, nullptr);
}
namespace {
class PrefEnabledRunnable MOZ_FINAL : public WorkerMainThreadRunnable
{
public:
PrefEnabledRunnable(WorkerPrivate* aWorkerPrivate)
: WorkerMainThreadRunnable(aWorkerPrivate)
, mEnabled(false)
{ }
bool MainThreadRun() MOZ_OVERRIDE
{
AssertIsOnMainThread();
mEnabled = WebSocket::PrefEnabled(nullptr, nullptr);
return true;
}
bool IsEnabled() const
{
return mEnabled;
}
private:
bool mEnabled;
};
} // anonymous namespace
bool
WebSocket::PrefEnabled(JSContext* /* aCx */, JSObject* /* aGlobal */)
{
if (NS_IsMainThread()) {
return Preferences::GetBool("network.websocket.enabled", true);
} else {
WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate();
MOZ_ASSERT(workerPrivate);
workerPrivate->AssertIsOnWorkerThread();
nsRefPtr<PrefEnabledRunnable> runnable =
new PrefEnabledRunnable(workerPrivate);
runnable->Dispatch(workerPrivate->GetJSContext());
return runnable->IsEnabled();
}
}
nsresult
WebSocketImpl::ParseURL(const nsAString& aURL)
{
AssertIsOnMainThread();
NS_ENSURE_TRUE(!aURL.IsEmpty(), NS_ERROR_DOM_SYNTAX_ERR);
nsCOMPtr<nsIURI> uri;
nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL);
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SYNTAX_ERR);
nsCOMPtr<nsIURL> parsedURL = do_QueryInterface(uri, &rv);
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SYNTAX_ERR);
nsAutoCString fragment;
rv = parsedURL->GetRef(fragment);
NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && fragment.IsEmpty(),
NS_ERROR_DOM_SYNTAX_ERR);
nsAutoCString scheme;
rv = parsedURL->GetScheme(scheme);
NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && !scheme.IsEmpty(),
NS_ERROR_DOM_SYNTAX_ERR);
nsAutoCString host;
rv = parsedURL->GetAsciiHost(host);
NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && !host.IsEmpty(), NS_ERROR_DOM_SYNTAX_ERR);
int32_t port;
rv = parsedURL->GetPort(&port);
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SYNTAX_ERR);
rv = NS_CheckPortSafety(port, scheme.get());
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SYNTAX_ERR);
nsAutoCString filePath;
rv = parsedURL->GetFilePath(filePath);
if (filePath.IsEmpty()) {
filePath.Assign('/');
}
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SYNTAX_ERR);
nsAutoCString query;
rv = parsedURL->GetQuery(query);
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SYNTAX_ERR);
if (scheme.LowerCaseEqualsLiteral("ws")) {
mSecure = false;
mPort = (port == -1) ? DEFAULT_WS_SCHEME_PORT : port;
} else if (scheme.LowerCaseEqualsLiteral("wss")) {
mSecure = true;
mPort = (port == -1) ? DEFAULT_WSS_SCHEME_PORT : port;
} else {
return NS_ERROR_DOM_SYNTAX_ERR;
}
rv = nsContentUtils::GetUTFOrigin(parsedURL, mUTF16Origin);
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SYNTAX_ERR);
mAsciiHost = host;
ToLowerCase(mAsciiHost);
mResource = filePath;
if (!query.IsEmpty()) {
mResource.Append('?');
mResource.Append(query);
}
uint32_t length = mResource.Length();
uint32_t i;
for (i = 0; i < length; ++i) {
if (mResource[i] < static_cast<char16_t>(0x0021) ||
mResource[i] > static_cast<char16_t>(0x007E)) {
return NS_ERROR_DOM_SYNTAX_ERR;
}
}
mWebSocket->mOriginalURL = aURL;
rv = parsedURL->GetSpec(mURI);
MOZ_ASSERT(NS_SUCCEEDED(rv));
return NS_OK;
}
//-----------------------------------------------------------------------------
// Methods that keep alive the WebSocket object when:
// 1. the object has registered event listeners that can be triggered
// ("strong event listeners");
// 2. there are outgoing not sent messages.
//-----------------------------------------------------------------------------
void
WebSocket::UpdateMustKeepAlive()
{
// Here we could not have mImpl.
MOZ_ASSERT(NS_IsMainThread() == !mWorkerPrivate);
if (!mCheckMustKeepAlive || !mImpl) {
return;
}
bool shouldKeepAlive = false;
if (mListenerManager) {
switch (ReadyState())
{
case CONNECTING:
{
if (mListenerManager->HasListenersFor(nsGkAtoms::onopen) ||
mListenerManager->HasListenersFor(nsGkAtoms::onmessage) ||
mListenerManager->HasListenersFor(nsGkAtoms::onerror) ||
mListenerManager->HasListenersFor(nsGkAtoms::onclose)) {
shouldKeepAlive = true;
}
}
break;
case OPEN:
case CLOSING:
{
if (mListenerManager->HasListenersFor(nsGkAtoms::onmessage) ||
mListenerManager->HasListenersFor(nsGkAtoms::onerror) ||
mListenerManager->HasListenersFor(nsGkAtoms::onclose) ||
mOutgoingBufferedAmount != 0) {
shouldKeepAlive = true;
}
}
break;
case CLOSED:
{
shouldKeepAlive = false;
}
}
}
if (mKeepingAlive && !shouldKeepAlive) {
mKeepingAlive = false;
mImpl->ReleaseObject();
} else if (!mKeepingAlive && shouldKeepAlive) {
mKeepingAlive = true;
mImpl->AddRefObject();
}
}
void
WebSocket::DontKeepAliveAnyMore()
{
// Here we could not have mImpl.
MOZ_ASSERT(NS_IsMainThread() == !mWorkerPrivate);
if (mKeepingAlive) {
MOZ_ASSERT(mImpl);
mKeepingAlive = false;
mImpl->ReleaseObject();
}
mCheckMustKeepAlive = false;
}
namespace {
class WebSocketWorkerFeature MOZ_FINAL : public WorkerFeature
{
public:
explicit WebSocketWorkerFeature(WebSocketImpl* aWebSocketImpl)
: mWebSocketImpl(aWebSocketImpl)
{
}
bool Notify(JSContext* aCx, Status aStatus) MOZ_OVERRIDE
{
MOZ_ASSERT(aStatus > workers::Running);
if (aStatus >= Canceling) {
mWebSocketImpl->CloseConnection(nsIWebSocketChannel::CLOSE_GOING_AWAY);
mWebSocketImpl->UnregisterFeature();
}
return true;
}
bool Suspend(JSContext* aCx)
{
mWebSocketImpl->CloseConnection(nsIWebSocketChannel::CLOSE_GOING_AWAY);
mWebSocketImpl->UnregisterFeature();
return true;
}
private:
WebSocketImpl* mWebSocketImpl;
};
} // anonymous namespace
void
WebSocketImpl::AddRefObject()
{
AssertIsOnTargetThread();
AddRef();
if (mWorkerPrivate && !mWorkerFeature) {
mWorkerPrivate->AssertIsOnWorkerThread();
MOZ_ASSERT(!mWorkerFeature);
mWorkerFeature = new WebSocketWorkerFeature(this);
JSContext* cx = GetCurrentThreadJSContext();
if (!mWorkerPrivate->AddFeature(cx, mWorkerFeature)) {
NS_WARNING("Failed to register a feature.");
mWorkerFeature = nullptr;
}
}
}
void
WebSocketImpl::ReleaseObject()
{
AssertIsOnTargetThread();
if (mWorkerPrivate && !mWorkerFeature) {
UnregisterFeature();
}
Release();
}
void
WebSocketImpl::UnregisterFeature()
{
MOZ_ASSERT(mWorkerPrivate);
mWorkerPrivate->AssertIsOnWorkerThread();
MOZ_ASSERT(mWorkerFeature);
JSContext* cx = GetCurrentThreadJSContext();
mWorkerPrivate->RemoveFeature(cx, mWorkerFeature);
mWorkerFeature = nullptr;
}
nsresult
WebSocketImpl::UpdateURI()
{
AssertIsOnTargetThread();
// Check for Redirections
nsRefPtr<BaseWebSocketChannel> channel;
channel = static_cast<BaseWebSocketChannel*>(mChannel.get());
MOZ_ASSERT(channel);
channel->GetEffectiveURL(mWebSocket->mEffectiveURL);
mSecure = channel->IsEncrypted();
return NS_OK;
}
void
WebSocket::EventListenerAdded(nsIAtom* aType)
{
AssertIsOnMainThread();
UpdateMustKeepAlive();
}
void
WebSocket::EventListenerRemoved(nsIAtom* aType)
{
AssertIsOnMainThread();
UpdateMustKeepAlive();
}
//-----------------------------------------------------------------------------
// WebSocket - methods
//-----------------------------------------------------------------------------
// webIDL: readonly attribute unsigned short readyState;
uint16_t
WebSocket::ReadyState()
{
MutexAutoLock lock(mMutex);
return mReadyState;
}
void
WebSocket::SetReadyState(uint16_t aReadyState)
{
MutexAutoLock lock(mMutex);
mReadyState = aReadyState;
}
// webIDL: readonly attribute unsigned long bufferedAmount;
uint32_t
WebSocket::BufferedAmount() const
{
AssertIsOnTargetThread();
return mOutgoingBufferedAmount;
}
// webIDL: attribute BinaryType binaryType;
dom::BinaryType
WebSocket::BinaryType() const
{
AssertIsOnTargetThread();
return mBinaryType;
}
// webIDL: attribute BinaryType binaryType;
void
WebSocket::SetBinaryType(dom::BinaryType aData)
{
AssertIsOnTargetThread();
mBinaryType = aData;
}
// webIDL: readonly attribute DOMString url
void
WebSocket::GetUrl(nsAString& aURL)
{
AssertIsOnTargetThread();
if (mEffectiveURL.IsEmpty()) {
aURL = mOriginalURL;
} else {
aURL = mEffectiveURL;
}
}
// webIDL: readonly attribute DOMString extensions;
void
WebSocket::GetExtensions(nsAString& aExtensions)
{
AssertIsOnTargetThread();
CopyUTF8toUTF16(mEstablishedExtensions, aExtensions);
}
// webIDL: readonly attribute DOMString protocol;
void
WebSocket::GetProtocol(nsAString& aProtocol)
{
AssertIsOnTargetThread();
CopyUTF8toUTF16(mEstablishedProtocol, aProtocol);
}
// webIDL: void send(DOMString data);
void
WebSocket::Send(const nsAString& aData,
ErrorResult& aRv)
{
AssertIsOnTargetThread();
NS_ConvertUTF16toUTF8 msgString(aData);
Send(nullptr, msgString, msgString.Length(), false, aRv);
}
void
WebSocket::Send(File& aData, ErrorResult& aRv)
{
AssertIsOnTargetThread();
nsCOMPtr<nsIInputStream> msgStream;
nsresult rv = aData.GetInternalStream(getter_AddRefs(msgStream));
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return;
}
uint64_t msgLength;
rv = aData.GetSize(&msgLength);
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return;
}
if (msgLength > UINT32_MAX) {
aRv.Throw(NS_ERROR_FILE_TOO_BIG);
return;
}
Send(msgStream, EmptyCString(), msgLength, true, aRv);
}
void
WebSocket::Send(const ArrayBuffer& aData,
ErrorResult& aRv)
{
AssertIsOnTargetThread();
aData.ComputeLengthAndData();
static_assert(sizeof(*aData.Data()) == 1, "byte-sized data required");
uint32_t len = aData.Length();
char* data = reinterpret_cast<char*>(aData.Data());
nsDependentCSubstring msgString(data, len);
Send(nullptr, msgString, len, true, aRv);
}
void
WebSocket::Send(const ArrayBufferView& aData,
ErrorResult& aRv)
{
AssertIsOnTargetThread();
aData.ComputeLengthAndData();
static_assert(sizeof(*aData.Data()) == 1, "byte-sized data required");
uint32_t len = aData.Length();
char* data = reinterpret_cast<char*>(aData.Data());
nsDependentCSubstring msgString(data, len);
Send(nullptr, msgString, len, true, aRv);
}
void
WebSocket::Send(nsIInputStream* aMsgStream,
const nsACString& aMsgString,
uint32_t aMsgLength,
bool aIsBinary,
ErrorResult& aRv)
{
AssertIsOnTargetThread();
int64_t readyState = ReadyState();
if (readyState == CONNECTING) {
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
return;
}
// Always increment outgoing buffer len, even if closed
mOutgoingBufferedAmount += aMsgLength;
if (readyState == CLOSING ||
readyState == CLOSED) {
return;
}
// We must have mImpl when connected.
MOZ_ASSERT(mImpl);
MOZ_ASSERT(readyState == OPEN, "Unknown state in WebSocket::Send");
nsresult rv;
if (aMsgStream) {
rv = mImpl->mChannel->SendBinaryStream(aMsgStream, aMsgLength);
} else {
if (aIsBinary) {
rv = mImpl->mChannel->SendBinaryMsg(aMsgString);
} else {
rv = mImpl->mChannel->SendMsg(aMsgString);
}
}
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return;
}
UpdateMustKeepAlive();
}
// webIDL: void close(optional unsigned short code, optional DOMString reason):
void
WebSocket::Close(const Optional<uint16_t>& aCode,
const Optional<nsAString>& aReason,
ErrorResult& aRv)
{
AssertIsOnTargetThread();
// the reason code is optional, but if provided it must be in a specific range
uint16_t closeCode = 0;
if (aCode.WasPassed()) {
if (aCode.Value() != 1000 && (aCode.Value() < 3000 || aCode.Value() > 4999)) {
aRv.Throw(NS_ERROR_DOM_INVALID_ACCESS_ERR);
return;
}
closeCode = aCode.Value();
}
nsCString closeReason;
if (aReason.WasPassed()) {
CopyUTF16toUTF8(aReason.Value(), closeReason);
// The API requires the UTF-8 string to be 123 or less bytes
if (closeReason.Length() > 123) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return;
}
}
int64_t readyState = ReadyState();
if (readyState == CLOSING ||
readyState == CLOSED) {
return;
}
// If the webSocket is not closed we MUST have a mImpl.
MOZ_ASSERT(mImpl);
if (readyState == CONNECTING) {
mImpl->FailConnection(closeCode, closeReason);
return;
}
MOZ_ASSERT(readyState == OPEN);
mImpl->CloseConnection(closeCode, closeReason);
}
//-----------------------------------------------------------------------------
// WebSocketImpl::nsIObserver
//-----------------------------------------------------------------------------
NS_IMETHODIMP
WebSocketImpl::Observe(nsISupports* aSubject,
const char* aTopic,
const char16_t* aData)
{
AssertIsOnMainThread();
int64_t readyState = mWebSocket->ReadyState();
if ((readyState == WebSocket::CLOSING) ||
(readyState == WebSocket::CLOSED)) {
return NS_OK;
}
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aSubject);
if (!mWebSocket->GetOwner() || window != mWebSocket->GetOwner()) {
return NS_OK;
}
if ((strcmp(aTopic, DOM_WINDOW_FROZEN_TOPIC) == 0) ||
(strcmp(aTopic, DOM_WINDOW_DESTROYED_TOPIC) == 0))
{
CloseConnection(nsIWebSocketChannel::CLOSE_GOING_AWAY);
}
return NS_OK;
}
//-----------------------------------------------------------------------------
// WebSocketImpl::nsIRequest
//-----------------------------------------------------------------------------
NS_IMETHODIMP
WebSocketImpl::GetName(nsACString& aName)
{
AssertIsOnMainThread();
CopyUTF16toUTF8(mWebSocket->mOriginalURL, aName);
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::IsPending(bool* aValue)
{
AssertIsOnTargetThread();
int64_t readyState = mWebSocket->ReadyState();
*aValue = (readyState != WebSocket::CLOSED);
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::GetStatus(nsresult* aStatus)
{
AssertIsOnTargetThread();
*aStatus = NS_OK;
return NS_OK;
}
namespace {
class CancelRunnable MOZ_FINAL : public WorkerRunnable
{
public:
CancelRunnable(WorkerPrivate* aWorkerPrivate, WebSocketImpl* aImpl)
: WorkerRunnable(aWorkerPrivate, WorkerThreadUnchangedBusyCount)
, mImpl(aImpl)
{
}
bool WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate)
{
aWorkerPrivate->AssertIsOnWorkerThread();
aWorkerPrivate->ModifyBusyCountFromWorker(aCx, true);
return !NS_FAILED(mImpl->CancelInternal());
}
void PostRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate, bool aRunResult)
{
aWorkerPrivate->ModifyBusyCountFromWorker(aCx, false);
}
bool
PreDispatch(JSContext* aCx, WorkerPrivate* aWorkerPrivate)
{
return true;
}
void
PostDispatch(JSContext* aCx, WorkerPrivate* aWorkerPrivate,
bool aDispatchResult)
{
}
private:
nsRefPtr<WebSocketImpl> mImpl;
};
} // anonymous namespace
// Window closed, stop/reload button pressed, user navigated away from page, etc.
NS_IMETHODIMP
WebSocketImpl::Cancel(nsresult aStatus)
{
AssertIsOnMainThread();
if (mWorkerPrivate) {
nsRefPtr<CancelRunnable> runnable =
new CancelRunnable(mWorkerPrivate, this);
if (!runnable->Dispatch(nullptr)) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
return CancelInternal();
}
nsresult
WebSocketImpl::CancelInternal()
{
AssertIsOnTargetThread();
int64_t readyState = mWebSocket->ReadyState();
if (readyState == WebSocket::CLOSING || readyState == WebSocket::CLOSED) {
return NS_OK;
}
ConsoleError();
return CloseConnection(nsIWebSocketChannel::CLOSE_GOING_AWAY);
}
NS_IMETHODIMP
WebSocketImpl::Suspend()
{
AssertIsOnMainThread();
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
WebSocketImpl::Resume()
{
AssertIsOnMainThread();
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
WebSocketImpl::GetLoadGroup(nsILoadGroup** aLoadGroup)
{
AssertIsOnMainThread();
*aLoadGroup = nullptr;
if (!mWorkerPrivate) {
nsresult rv;
nsIScriptContext* sc = mWebSocket->GetContextForEventHandlers(&rv);
nsCOMPtr<nsIDocument> doc =
nsContentUtils::GetDocumentFromScriptContext(sc);
if (doc) {
*aLoadGroup = doc->GetDocumentLoadGroup().take();
}
return NS_OK;
}
// Walk up to our containing page
WorkerPrivate* wp = mWorkerPrivate;
while (wp->GetParent()) {
wp = wp->GetParent();
}
nsPIDOMWindow* window = wp->GetWindow();
if (!window) {
return NS_OK;
}
nsIDocument* doc = window->GetExtantDoc();
if (doc) {
*aLoadGroup = doc->GetDocumentLoadGroup().take();
}
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::SetLoadGroup(nsILoadGroup* aLoadGroup)
{
AssertIsOnMainThread();
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
WebSocketImpl::GetLoadFlags(nsLoadFlags* aLoadFlags)
{
AssertIsOnMainThread();
*aLoadFlags = nsIRequest::LOAD_BACKGROUND;
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::SetLoadFlags(nsLoadFlags aLoadFlags)
{
AssertIsOnMainThread();
// we won't change the load flags at all.
return NS_OK;
}
namespace {
class WorkerRunnableDispatcher MOZ_FINAL : public WorkerRunnable
{
public:
WorkerRunnableDispatcher(WorkerPrivate* aWorkerPrivate, nsIRunnable* aEvent)
: WorkerRunnable(aWorkerPrivate, WorkerThreadUnchangedBusyCount)
, mEvent(aEvent)
{
}
bool WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate)
{
aWorkerPrivate->AssertIsOnWorkerThread();
aWorkerPrivate->ModifyBusyCountFromWorker(aCx, true);
return !NS_FAILED(mEvent->Run());
}
void PostRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate, bool aRunResult)
{
aWorkerPrivate->ModifyBusyCountFromWorker(aCx, false);
}
bool
PreDispatch(JSContext* aCx, WorkerPrivate* aWorkerPrivate)
{
return true;
}
void
PostDispatch(JSContext* aCx, WorkerPrivate* aWorkerPrivate,
bool aDispatchResult)
{
}
private:
nsCOMPtr<nsIRunnable> mEvent;
};
} // anonymous namespace
NS_IMETHODIMP
WebSocketImpl::Dispatch(nsIRunnable* aEvent, uint32_t aFlags)
{
// If the target is the main-thread we can just dispatch the runnable.
if (!mWorkerPrivate) {
return NS_DispatchToMainThread(aEvent);
}
// If the target is a worker, we have to use a custom WorkerRunnableDispatcher
// runnable.
nsRefPtr<WorkerRunnableDispatcher> event =
new WorkerRunnableDispatcher(mWorkerPrivate, aEvent);
if (!event->Dispatch(nullptr)) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_IMETHODIMP
WebSocketImpl::IsOnCurrentThread(bool* aResult)
{
*aResult = IsTargetThread();
return NS_OK;
}
bool
WebSocketImpl::IsTargetThread() const
{
return NS_IsMainThread() == !mWorkerPrivate;
}
void
WebSocket::AssertIsOnTargetThread() const
{
MOZ_ASSERT(NS_IsMainThread() == !mWorkerPrivate);
}
} // dom namespace
} // mozilla namespace