diff options
Diffstat (limited to 'Tools/iExploder/htdocs')
-rw-r--r-- | Tools/iExploder/htdocs/config.rb | 6 | ||||
-rw-r--r-- | Tools/iExploder/htdocs/cssproperties.in | 426 | ||||
-rw-r--r-- | Tools/iExploder/htdocs/cssvalues.in | 339 | ||||
-rw-r--r-- | Tools/iExploder/htdocs/htmlattrs.in | 373 | ||||
-rw-r--r-- | Tools/iExploder/htdocs/htmltags.in | 155 | ||||
-rw-r--r-- | Tools/iExploder/htdocs/htmlvalues.in | 35 | ||||
-rwxr-xr-x | Tools/iExploder/htdocs/iexploder.cgi | 45 | ||||
-rw-r--r-- | Tools/iExploder/htdocs/iexploder.rb | 337 | ||||
-rw-r--r-- | Tools/iExploder/htdocs/index.html | 34 | ||||
-rwxr-xr-x | Tools/iExploder/htdocs/webserver.rb | 75 |
10 files changed, 1825 insertions, 0 deletions
diff --git a/Tools/iExploder/htdocs/config.rb b/Tools/iExploder/htdocs/config.rb new file mode 100644 index 0000000..d9e7e1b --- /dev/null +++ b/Tools/iExploder/htdocs/config.rb @@ -0,0 +1,6 @@ +# Configuration for iExploder.. not generally tuned. + +$HTML_MAX_TAGS = 96; +$HTML_MAX_ATTRS = 4; +$CSS_MAX_PROPS = 5; + diff --git a/Tools/iExploder/htdocs/cssproperties.in b/Tools/iExploder/htdocs/cssproperties.in new file mode 100644 index 0000000..d49eb8e --- /dev/null +++ b/Tools/iExploder/htdocs/cssproperties.in @@ -0,0 +1,426 @@ +# From WebKit svn r66165 (WebCore/css/CSSPropertyNames.in) +-webkit-animation +-webkit-animation-delay +-webkit-animation-direction +-webkit-animation-duration +-webkit-animation-fill-mode +-webkit-animation-iteration-count +-webkit-animation-name +-webkit-animation-play-state +-webkit-animation-timing-function +-webkit-appearance +-webkit-backface-visibility +-webkit-background-clip +-webkit-background-composite +-webkit-background-origin +-webkit-background-size +-webkit-border-end +-webkit-border-end-color +-webkit-border-end-style +-webkit-border-end-width +-webkit-border-fit +-webkit-border-horizontal-spacing +-webkit-border-image +-webkit-border-radius +-webkit-border-start +-webkit-border-start-color +-webkit-border-start-style +-webkit-border-start-width +-webkit-border-vertical-spacing +-webkit-box-align +-webkit-box-direction +-webkit-box-flex +-webkit-box-flex-group +-webkit-box-lines +-webkit-box-ordinal-group +-webkit-box-orient +-webkit-box-pack +-webkit-box-reflect +-webkit-box-shadow +-webkit-color-correction +-webkit-column-break-after +-webkit-column-break-before +-webkit-column-break-inside +-webkit-column-count +-webkit-column-gap +-webkit-column-rule +-webkit-column-rule-color +-webkit-column-rule-style +-webkit-column-rule-width +-webkit-column-span +-webkit-column-width +-webkit-columns +-webkit-font-size-delta +-webkit-font-smoothing +-webkit-highlight +-webkit-hyphenate-character +-webkit-hyphenate-locale +-webkit-hyphens +-webkit-line-break +-webkit-line-clamp +-webkit-margin-bottom-collapse +-webkit-margin-collapse +-webkit-margin-end +-webkit-margin-start +-webkit-margin-top-collapse +-webkit-marquee +-webkit-marquee-direction +-webkit-marquee-increment +-webkit-marquee-repetition +-webkit-marquee-speed +-webkit-marquee-style +-webkit-mask +-webkit-mask-attachment +-webkit-mask-box-image +-webkit-mask-clip +-webkit-mask-composite +-webkit-mask-image +-webkit-mask-origin +-webkit-mask-position +-webkit-mask-position-x +-webkit-mask-position-y +-webkit-mask-repeat +-webkit-mask-repeat-x +-webkit-mask-repeat-y +-webkit-mask-size +-webkit-match-nearest-mail-blockquote-color +-webkit-nbsp-mode +-webkit-padding-end +-webkit-padding-start +-webkit-perspective +-webkit-perspective-origin +-webkit-perspective-origin-x +-webkit-perspective-origin-y +-webkit-rtl-ordering +-webkit-text-decorations-in-effect +-webkit-text-fill-color +-webkit-text-security +-webkit-text-size-adjust +-webkit-text-stroke +-webkit-text-stroke-color +-webkit-text-stroke-width +-webkit-transform +-webkit-transform-origin +-webkit-transform-origin-x +-webkit-transform-origin-y +-webkit-transform-origin-z +-webkit-transform-style +-webkit-transition +-webkit-transition-delay +-webkit-transition-duration +-webkit-transition-property +-webkit-transition-timing-function +-webkit-user-drag +-webkit-user-modify +-webkit-user-select +-webkit-variable-declaration-block +background +background-attachment +background-clip +background-color +background-image +background-origin +background-position +background-position-x +background-position-y +background-repeat +background-repeat-x +background-repeat-y +background-size +border +border-bottom +border-bottom-color +border-bottom-left-radius +border-bottom-right-radius +border-bottom-style +border-bottom-width +border-collapse +border-color +border-left +border-left-color +border-left-style +border-left-width +border-radius +border-right +border-right-color +border-right-style +border-right-width +border-spacing +border-style +border-top +border-top-color +border-top-left-radius +border-top-right-radius +border-top-style +border-top-width +border-width +bottom +box-sizing +caption-side +clear +clip +color +content +counter-increment +counter-reset +cursor +direction +display +empty-cells +float +font +font-family +font-size +font-stretch +font-style +font-variant +font-weight +height +left +letter-spacing +line-height +list-style +list-style-image +list-style-position +list-style-type +margin +margin-bottom +margin-left +margin-right +margin-top +max-height +max-width +min-height +min-width +opacity +orphans +outline +outline-color +outline-offset +outline-style +outline-width +overflow +overflow-x +overflow-y +padding +padding-bottom +padding-left +padding-right +padding-top +page +page-break-after +page-break-before +page-break-inside +pointer-events +position +quotes +resize +right +size +src +table-layout +text-align +text-decoration +text-indent +text-line-through +text-line-through-color +text-line-through-mode +text-line-through-style +text-line-through-width +text-overflow +text-overline +text-overline-color +text-overline-mode +text-overline-style +text-overline-width +text-rendering +text-shadow +text-transform +text-underline +text-underline-color +text-underline-mode +text-underline-style +text-underline-width +top +unicode-bidi +unicode-range +vertical-align +visibility +white-space +widows +width +word-break +word-spacing +word-wrap +z-index +zoom + +# CSS3 properties - http://www.css3.info/preview/ +background-clip +background-origin +border-image +border-radius +box-shadow +box-sizing +column-count +column-gap +column-min-width +column-rule +column-rule-color +column-rule-style +column-rule-width +column-space-distribution +column-span +column-width +column-width-policy + +# Removed from WebKit between r53119 and r66165 +-webkit-binding + +# Removed from WebKit between r44660 and r53119 +-webkit-border-bottom-left-radius +-webkit-border-bottom-right-radius +-webkit-border-top-left-radius +-webkit-border-top-right-radius + +# Removed from WebKit between r24523 and r44660 +-webkit-dashboard-region +scrollbar-3dlight-color +scrollbar-arrow-color +scrollbar-darkshadow-color +scrollbar-face-color +scrollbar-highlight-color +scrollbar-shadow-color +scrollbar-track-color + +# All of the following are from khtml's cssproperties.in as of 19oct2004, but are no longer in WebKit +-khtml-border-horizontal-spacing +-khtml-border-vertical-spacing +-khtml-flow-mode +-khtml-marquee +-khtml-marquee-direction +-khtml-marquee-increment +-khtml-marquee-repetition +-khtml-marquee-speed +-khtml-marquee-style +-khtml-text-decoration-color +-khtml-user-input +scrollbar-base-color + +# Internet Explorer 6.0 - http://msdn.microsoft.com/workshop/author/css/reference/attributes.asp +filter:progid: +filter: +ime-mode +layout-flow +layout-grid +layout-grid-char +layout-grid-line +layout-grid-mode +layout-grid-type +line-break +overflow-x +overflow-y +pagebreakafter +pagebreakbefore +ruby-align +ruby-overhang +ruby-position +text-autospace +text-justify +text-kashida-space +text-underline-position +word-break +writing-mode +zoom + +# from http://msdn.microsoft.com/library/default.asp?url=/workshop/author/filter/reference/reference.asp +filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( +filter:progid:DXImageTransform.Microsoft.Blur( +filter:progid:DXImageTransform.Microsoft.MotionBlur( +filter:progid:DXImageTransform.Microsoft.Gradient( +filter:progid:DXImageTransform.Microsoft.Pixelate( + +# From Mozilla Firefox CVS on 2006-04-15 (layout/style/nsCSSPropList.h) +# grep "^CSS_PROP" nsCSSPropList.h | grep -v "_SVG" |cut -d, -f1 | cut -d\( -f2 | sort +++ /tmp/moz Tue Apr 18 13:45:30 2006 +-moz-appearance +-moz-background-clip +-moz-background-inline-policy +-moz-background-origin +-moz-binding +-moz-border-bottom-colors +-moz-border-left-colors +-moz-border-radius +-moz-border-radius-bottomleft +-moz-border-radius-bottomright +-moz-border-radius-topleft +-moz-border-radius-topright +-moz-border-right-colors +-moz-border-top-colors +-moz-box-align +-moz-box-direction +-moz-box-flex +-moz-box-ordinal-group +-moz-box-orient +-moz-box-pack +-moz-box-sizing +-moz-column-count +-moz-column-gap +-moz-column-width +-moz-float-edge +-moz-force-broken-image-icon +-moz-image-region +-moz-margin-end +-moz-margin-start +-moz-outline-radius +-moz-outline-radius-bottomleft +-moz-outline-radius-bottomright +-moz-outline-radius-topleft +-moz-outline-radius-topright +-moz-padding-end +-moz-padding-start +-moz-user-focus +-moz-user-input +-moz-user-modify +-moz-user-select +-x-background-x-position +-x-background-y-position +azimuth +cue +cue-after +cue-before +elevation +font-size-adjust +margin-end-value +margin-left-ltr-source +margin-left-rtl-source +margin-left-value +margin-right-ltr-source +margin-right-rtl-source +margin-right-value +margin-start-value +marker +marker-offset +marks +padding-end-value +padding-left-ltr-source +padding-left-rtl-source +padding-left-value +padding-right-ltr-source +padding-right-rtl-source +padding-right-value +padding-start-value +pause +pause-after +pause-before +pitch +pitch-range +richness +speak +speak-header +speak-numeral +speak-punctuation +speech-rate +stress +voice-family +volume diff --git a/Tools/iExploder/htdocs/cssvalues.in b/Tools/iExploder/htdocs/cssvalues.in new file mode 100644 index 0000000..c19f78f --- /dev/null +++ b/Tools/iExploder/htdocs/cssvalues.in @@ -0,0 +1,339 @@ +"Trebuchet MS",Verdana, Arial, Helvetica, sans-serif +#339933 !important !important !important +#9999999999999999999999999999999999999999999 +-5, -5, -5 +-9999% +-999999999999999999999999999% +-999999999999999999999999999em +-999999999999999999999999999px +-9999em +-9999px +-webkit-activelink +-webkit-auto +-webkit-baseline-middle +-webkit-body +-webkit-box +-webkit-center +-webkit-focus-ring-color +-webkit-inline-box +-webkit-left +-webkit-link +-webkit-marquee +-webkit-nowrap +-webkit-overlay +-webkit-right +-webkit-text +-webkit-xxx-large +0 +0 auto +0 fixed +2% +90000000000000000000000000000000000000000000% +9999999999999999999999 +99999999999999999999999999999999999999 auto +99999999999999999999999999999999999999999999px +999999px solid #fff +above +absolute +activeborder +activecaption +after-white-space +ahead +alternate +always +appworkspace +aqua +armenian +attr("ATTRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") +auto +avoid +background +backwards +baseline +below +bidi-override +black +blink +block +block clear +block width +block-axis +blue +bold +bolder +border +border-box +both +bottom +break-word +button +button-bevel +buttonface +buttonhighlight +buttonshadow +buttontext +capitalize +caption +captiontext +caret +center +checkbox +circle +cjk-ideographic +clip +clip:rect(-0px -2000000px -200000px -0px) +clip:rect(0px 2000000px 200000px 0px) +close-quote +collapse +compact +condensed +content +content-box +continuous +crop +cross +crosshair +cursive +dashed +decimal +decimal-leading-zero +default +disc +discard +dot-dash +dot-dot-dash +dotted +double +down +e-resize +element +ellipsis +embed +end +expanded +extra-condensed +extra-expanded +fantasy +fast +fixed +forwards +fuchsia +georgian +gray +graytext +green +grey +groove +hand +hebrew +help +helvetica, arial, Courier New, Courier, Mono, Blah, Blah, Blah +hidden +hide +higher +highlight +highlighttext +hiragana +hiragana-iroha +horizontal +icon +ignore +inactiveborder +inactivecaption +inactivecaptiontext +infinite +infobackground +infotext +inherit +initial +inline +inline-axis +inline-block +inline-table +inset +inside +intrinsic +invert +italic +justify +katakana +katakana-iroha +landscape +large +larger +left +level +lighter +lime +line-through +list-item +listbox +listitem +logical +loud +lower +lower-alpha +lower-greek +lower-latin +lower-roman +lowercase +ltr +marker +maroon +match +medium +menu +menulist +menulist-button +menulist-text +menulist-textfield +menutext +message-box +middle +min-intrinsic +mix +monospace +move +multiple +n-resize +narrower +navy +ne-resize +no-close +no-close-quote +no-open-quote +no-repeat +none +normal +normal !important +nowrap +nw-resize +oblique +olive +once +open-quote +orange +outset +outside +overline +padding +pointer +portrait +pre +pre-line +pre-wrap +purple +push-button +radio +read-only +read-write +read-write-plaintext-only +red +relative +repeat +repeat-x +repeat-y +reverse +rgb(9999999999, 999999999, 9999999999999) +ridge +right +round +rtl +run-in +s-resize +sans-serif +scroll +scrollbar +scrollbarbutton-down +scrollbarbutton-left +scrollbarbutton-right +scrollbarbutton-up +scrollbargripper-horizontal +scrollbargripper-vertical +scrollbarthumb-horizontal +scrollbarthumb-vertical +scrollbartrack-horizontal +scrollbartrack-vertical +se-resize +searchfield +searchfield-close +searchfield-results +semi-condensed +semi-expanded +separate +serif +show +silver +single +skip-white-space +slide +slider-horizontal +slider-vertical +sliderthumb-horizontal +sliderthumb-vertical +slow +small +small-caps +small-caption +smaller +solid +space +square +square-button +start +static +status-bar +stretch +sub +super +sw-resize +table +table-caption +table-cell +table-column +table-column-group +table-footer-group +table-header-group +table-row +table-row-group +teal +text +text-bottom +text-top +textfield +thick +thick dashed yellow +thick dotted blue +thin +threeddarkshadow +threedface +threedhighlight +threedlightshadow +threedshadow +top +transparent +ultra-condensed +ultra-expanded +underline +unfurl +up +upper-alpha +upper-latin +upper-roman +uppercase +vertical +visible +visual +w-resize +wait +wave +white +wider +window +windowframe +windowtext +x-large +x-small +xx-large +xx-small +yellow diff --git a/Tools/iExploder/htdocs/htmlattrs.in b/Tools/iExploder/htdocs/htmlattrs.in new file mode 100644 index 0000000..0dc8116 --- /dev/null +++ b/Tools/iExploder/htdocs/htmlattrs.in @@ -0,0 +1,373 @@ +# From WebKit svn r66165 (WebCore/html/HTMLAttributeNames.in) +abbr +accept +accept_charset +accesskey +action +align +alink +alt +archive +aria-activedescendant +aria-atomic +aria-busy +aria-checked +aria-controls +aria-describedby +aria-disabled +aria-dropeffect +aria-expanded +aria-flowto +aria-grabbed +aria-haspopup +aria-help +aria-hidden +aria-label +aria-labeledby +aria-labelledby +aria-level +aria-live +aria-multiselectable +aria-orientation +aria-owns +aria-pressed +aria-readonly +aria-relevant +aria-required +aria-selected +aria-valuemax +aria-valuemin +aria-valuenow +aria-valuetext +async +autocomplete +autofocus +autoplay +autosave +axis +background +behavior +bgcolor +bgproperties +border +bordercolor +cellborder +cellpadding +cellspacing +challenge +char +charoff +charset +checked +cite +class +classid +clear +code +codebase +codetype +color +cols +colspan +compact +composite +content +contenteditable +controls +coords +data +datetime +declare +defer +dir +direction +disabled +draggable +enctype +end +event +expanded +face +focused +for +formnovalidate +frame +frameborder +headers +height +hidden +high +href +hreflang +hspace +http_equiv +id +incremental +indeterminate +ismap +keytype +label +lang +language +leftmargin +link +list +longdesc +loop +loopend +loopstart +low +lowsrc +manifest +marginheight +marginwidth +max +maxlength +mayscript +media +method +min +multiple +name +nohref +noresize +noshade +novalidate +nowrap +object +onabort +onbeforecopy +onbeforecut +onbeforeload +onbeforepaste +onbeforeprocess +onbeforeunload +onblur +oncanplay +oncanplaythrough +onchange +onclick +oncontextmenu +oncopy +oncut +ondblclick +ondrag +ondragend +ondragenter +ondragleave +ondragover +ondragstart +ondrop +ondurationchange +onemptied +onended +onerror +onfocus +onfocusin +onfocusout +onhashchange +oninput +oninvalid +onkeydown +onkeypress +onkeyup +onload +onloadeddata +onloadedmetadata +onloadstart +onmousedown +onmousemove +onmouseout +onmouseover +onmouseup +onmousewheel +onoffline +ononline +onorientationchange +onpagehide +onpageshow +onpaste +onpause +onplay +onplaying +onpopstate +onprogress +onratechange +onreset +onresize +onscroll +onsearch +onseeked +onseeking +onselect +onselectstart +onstalled +onstorage +onsubmit +onsuspend +ontimeupdate +ontouchcancel +ontouchend +ontouchmove +ontouchstart +onunload +onvolumechange +onwaiting +onwebkitanimationend +onwebkitanimationiteration +onwebkitanimationstart +onwebkitbeginfullscreen +onwebkitendfullscreen +onwebkittransitionend +optimum +pattern +placeholder +playcount +pluginurl +poster +precision +preload +primary +profile +progress +prompt +readonly +rel +required +results +rev +role +rows +rowspan +rules +sandbox +scheme +scope +scrollamount +scrolldelay +scrolling +selected +shape +size +sortable +sortdirection +span +speech +spellcheck +src +standby +start +step +style +summary +tabindex +tableborder +target +text +title +top +topmargin +truespeed +type +usemap +valign +value +valuetype +version +viewsource +vlink +vspace +webkitdirectory +width +wrap + +# Removed from WebKit between r53119 and r56558 +autobuffer + +# Removed from WebKit between r14011 and r53119 +left +pagex +pagey +plain +pluginpage +pluginspage + +# was in khtml in 2004, but is no longer in WebCore +accept-charset +html +http-equiv +nosave +oversrc +unknown +visibility +z-index + +# From Mozilla CVS 2006-04-15 (mozilla/layout/style/xbl-marquee) +bounce +finish +onbounce +onfinish +onstart + + +# IE specific, from msdn.microsoft.com/workshop/author/dhtml/reference/properties +acceptcharset +allowtransparency +balance +choff +datafld +dataformatas +datapagesize +datasrc +dynsrc +framespacing +galleryimg +hidefocus +methods +scroll +units +urn +volume + +# From Mozilla CVS 2006-04-15 (mozilla/content/base/src/nsGkAtomList.h) +# To get these, I used: +# ggrep -r "Get.*Attr" * | perl -ne 'if (/nsHTMLAtoms::(\w+)/) { \ +# system("grep \\($1, content/base/src/nsGkAtomList.h"); }' \ +# | cut -d\" -f2 | sort -u +autocheck +base +bottommargin +event +font-weight +handler +layout +observer +ping +point-size +rightmargin +variable + +# events from Mozilla CVS 2006-04-15 (mozilla/content/base/src/nsGkAtomList.h) +# cat nsGkAtomList.h | grep GK_ATOM | cut -d\" -f2 | egrep "^on[a-z]+" +onzoom +onunderflow +ontext +onset +onpopupshown +onpopupshowing +onpopuphiding +onpopuphidden +onpaint +onpageshow +onpagehide +onoverflowchanged +onoverflow +onget +ondraggesture +ondragexit +ondragdrop +oncompositionstart +oncompositionend +oncommandupdate +oncommand +onclose diff --git a/Tools/iExploder/htdocs/htmltags.in b/Tools/iExploder/htdocs/htmltags.in new file mode 100644 index 0000000..319d528 --- /dev/null +++ b/Tools/iExploder/htdocs/htmltags.in @@ -0,0 +1,155 @@ +# From WebKit svn r66165 (WebCore/html/HTMLTagNames.in) +a +abbr +acronym +address +applet +area +article +aside +audio +b +base +basefont +bdo +bgsound +big +blockquote +body +br +button +canvas +caption +center +cite +code +col +colgroup +command +datagrid +datalist +dcell +dcol +dd +del +details +dfn +dir +div +dl +drow +dt +em +embed +fieldset +figcaption +figure +font +footer +form +frame +frameset +h1 +h2 +h3 +h4 +h5 +h6 +head +header +hgroup +hr +html +i +iframe +image +img +input +ins +isindex +kbd +keygen +label +layer +legend +li +link +listing +map +mark +marquee +menu +meta +meter +nav +nobr +noembed +noframes +nolayer +noscript +noscript +object +ol +optgroup +option +p +param +plaintext +pre +progress +q +rp +rt +ruby +s +samp +script +section +select +small +source +span +strike +strong +style +sub +summary +sup +table +tbody +td +textarea +tfoot +th +thead +title +tr +track +tt +u +ul +var +video +wbr +xmp + +# This was in khtml in 10-2004 +ilayer + +# Additions from Mozilla CVS, 2006-04-18. +# mozilla/parser/htmlparser/public/nsHTMLTagList.h +bgsound +blink +multicol +spacer + +# The following tags used to be in Mozilla in 10-2004, now removed +counter +endnote +parsererror +server +sound +sourcetext + +# From Internet Explorer - http://msdn.microsoft.com/workshop/author/html/reference/elements.asp +xml diff --git a/Tools/iExploder/htdocs/htmlvalues.in b/Tools/iExploder/htdocs/htmlvalues.in new file mode 100644 index 0000000..d54984f --- /dev/null +++ b/Tools/iExploder/htdocs/htmlvalues.in @@ -0,0 +1,35 @@ +# Many of the following are from mangleme.cgi.c's make_up_value() function +# +* +_blank +_parent +_self +_top +about: +about:plugins +file: +http: +jar: +javascript: +left +top +%n%n%n%n%n +ftp: +right +wysiwyg: +bottom +none +ldap: +%i %i +999999999,9999999,999999999,9999999,999999999,9999999,999999999,9999999,9 +999999999,9999999,9 +999999999,9999999 +true +false +_SEARCH +javascript +off +on +vbscript +password +image diff --git a/Tools/iExploder/htdocs/iexploder.cgi b/Tools/iExploder/htdocs/iexploder.cgi new file mode 100755 index 0000000..89e099c --- /dev/null +++ b/Tools/iExploder/htdocs/iexploder.cgi @@ -0,0 +1,45 @@ +#!/usr/bin/ruby +# iExploder - Generates bad HTML files to perform QA for web browsers. +# Developed for the Mozilla Foundation. +##################### +# +# Copyright (c) 2006 Thomas Stromberg <thomas%stromberg.org> +# +# This software is provided 'as-is', without any express or implied warranty. +# In no event will the authors be held liable for any damages arising from the +# use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software in a +# product, an acknowledgment in the product documentation would be appreciated +# but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not be +# misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source distribution. + +require 'cgi'; +require 'iexploder'; +require 'config'; + +### THE INTERACTION ################################## +ie = IExploder.new($HTML_MAX_TAGS, $HTML_MAX_ATTRS, $CSS_MAX_PROPS) +ie.readTagFiles() + +cgi = CGI.new("html4"); +ie.url=ENV['SCRIPT_NAME'] || '?' +ie.test_num = cgi.params['test'][0].to_i +ie.subtest_num = cgi.params['subtest'][0].to_i || 0 +ie.random_mode = cgi.params['random'][0] +ie.lookup_mode = cgi.params['lookup'][0] +ie.stop_num = cgi.params['stop'][0].to_i || 0 +ie.setRandomSeed + +cgi.out('type' => 'text/html') do + ie.buildPage() +end diff --git a/Tools/iExploder/htdocs/iexploder.rb b/Tools/iExploder/htdocs/iexploder.rb new file mode 100644 index 0000000..eee3e38 --- /dev/null +++ b/Tools/iExploder/htdocs/iexploder.rb @@ -0,0 +1,337 @@ +# iExploder - Generates bad HTML files to perform QA for web browsers. +# Developed for the Mozilla Foundation. +##################### +# +# Copyright (c) 2006 Thomas Stromberg <thomas%stromberg.org> +# +# This software is provided 'as-is', without any express or implied warranty. +# In no event will the authors be held liable for any damages arising from the +# use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software in a +# product, an acknowledgment in the product documentation would be appreciated +# but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not be +# misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source distribution. + +$VERSION="1.3.2" + +class IExploder + attr_accessor :test_num, :subtest_num, :lookup_mode, :random_mode, :url + attr_accessor :offset, :lines, :stop_num + + def initialize(max_tags, max_attrs, max_props) + @htmlMaxTags = max_tags + @htmlMaxAttrs = max_attrs + @cssMaxProps = max_props + @mangledTagTotal = 0 + @stop_num = 0 + end + + def setRandomSeed + if @test_num > 0 + srand(@test_num) + else + srand + end + end + + + def readTagFiles + # These if statements are so that mod_ruby doesn't have to reload the files + # each time + + if (! @cssTags) + @cssTags = readTagFile('cssproperties.in'); + end + + if (! @htmlTags) + @htmlTags = readTagFile('htmltags.in'); + end + if (! @htmlAttr) + @htmlAttr = readTagFile('htmlattrs.in'); + end + + if (! @htmlValues) + @htmlValues = readTagFile('htmlvalues.in'); + end + + if (! @cssValues) + @cssValues = readTagFile('cssvalues.in'); + end + + end + + + def readTagFile(filename) + list = Array.new + File.new(filename).readlines.each { |line| + line.chop! + + # Don't include comments. + if (line !~ /^# /) && (line.length > 0) + list << line + end + } + return list + end + + # based on make_up_value, essentially. + def inventValue + value = rand(19); + case value + when 1..3 then return (@htmlValues[rand(@htmlValues.length)]) + when 4..5 then return (@htmlValues[rand(@htmlValues.length)] + inventValue()) + when 6 then return (@htmlValues[rand(@htmlValues.length)] + "//" + inventValue()) + when 7 then return '' + # this may return negative argument? + when 8..10 then return rand(255).chr * (rand(256)+8) + when 11 then return rand(255).chr * (rand(2048)+8) + when 12 then return "#" + rand(999999).to_s + when 13 then return rand(999999).to_s + "%" + when 14..15 then return "&" + rand(999999).to_s + ";" + # filters + when 16 then + return inventValue() + "=" + inventValue() + + # this my return undefined method + for nil:NilClass + when 17 then return inventValue() + "," + inventValue() + else + if rand(5) > 3 + return "-" + rand(999999).to_s + else + return rand(999999).to_s + end + end + end + + # based on make_up_value, essentially. + def inventCssValue(tag) + value = rand(23); + case value + when 1..10 then return @cssValues[rand(@cssValues.length)] + when 11 then return '' + when 12 then return rand(255).chr * (rand(8192)+8) + when 13 + length = rand(1024) + 8 + return (rand(255).chr * length) + " " + (rand(255).chr * length) + " " + (rand(255).chr * length) + when 14 then return (rand(255).chr * (rand(1024)+3)) + "px" + when 15 then return (rand(255).chr * (rand(1024)+3)) + "em" + when 16 then return "url(" + inventValue() + ")" + when 17..18 then return "#" + rand(999999999).to_s + when 19 then return "-" + rand(99999999).to_s + else return rand(99999999).to_s; + end + end + + + def mangleTag(tag) + @mangledTagTotal += 1 + out = '' + + # 20% chance of closing a tag instead of opening it. This + # still counts against @mangledTagTotal, however. + if rand(10) > 8 + out = "</" + tag + ">" + return out + end + + # we're opening it. + out = "<" + tag + + # forgot the space between the tag and the attributes + if rand(15) > 1 + out << ' ' + end + + attrNum = rand(@htmlMaxAttrs) + 1 + + 1.upto(attrNum) { + attr = @htmlAttr[rand(@htmlAttr.length)] + + out << attr + + # 7.5% of the time we skip the = sign. Don't prefix it + # if the attribute ends with a ( however. + + + if rand(15) > 1 + out << '=' + end + + # sometimes quote it, sometimes not. I doubt the importance + # of this test, but mangleme-1.2 added it, and adding more + # random-ness never hurt anything but time. I'll do it less often. + quote = rand(2) + if (quote > 1) + out << "\"" + end + + out << inventValue() + + # end the quote when you are done + if (quote > 1) + out << "\" " + end + + # 5% chance we skip the space at the end of the name + if rand(20) > 1 + out << ' ' + end + + } + + # CSS styles! + if rand(4) > 1 + out << " style=\"" + 1.upto(rand(@cssMaxProps)+1) { + out << @cssTags[rand(@cssTags.length)] + + # very small chance we let the tag run on. + if rand(50) > 1 + out << ": " + end + + out << inventCssValue(tag) + # we almost always put the ; there. + if rand(50) > 1 + out << '; ' + end + } + out << "\"" + end + + out << ">\n" + + # support our local troops! + if (@subtest_num > 0) && filterSubTest() + if tag =~ /html|body|head/ + return '<' + tag + '>' + else + return "<x-#@mangledTagTotal>\n" + end + else + return out + end + end + #end + + def filterSubTest() + result = 1 + if (@mangledTagTotal >= @offset) && (@mangledTagTotal < (@offset + @lines)) + result = nil + end + return result + end + + def nextTestNum() + if random_mode + n = rand(99999999) + else + if @test_num + n = @test_num + 1 + else + n = 1 + end + end + return n + end + + # If we are at line 30 with 8 extra lines, there is no point to try line 31 + # with 8 lines as well.. skip back to 1 and bump up the line count. + def nextSubTestNum() + if (@offset + @lines) > @htmlMaxTags + nextNum = ((@lines * 2 -1)) * @htmlMaxTags + else + nextNum = @subtest_num + 1 + end + return nextNum + end + + + def buildPage + if (! @test_num) || (@test_num < 1) + @test_num = 1 + end + next_num=nextTestNum() + @lines = @subtest_num.div(@htmlMaxTags) + 1 + @offset = @subtest_num.modulo(@htmlMaxTags) + + # building the HTML + bodyText = mangleTag('html') + bodyText << "\n<head>\n" + + # Only do redirects if lookup=1 has not been specified. + if (! @lookup_mode) && (@lines <= @htmlMaxTags) && (@stop_num != @test_num) + newpage = @url + "?" + if @subtest_num > 0 + newpage << "test=" << @test_num.to_s << "&subtest=" << nextSubTestNum().to_s + else + newpage << "test=" << next_num.to_s + end + + if @random_mode + newpage << "&random=1" + end + + if @stop_num > 0 + newpage << "&stop=" << @stop_num.to_s + end + + bodyText << "\t<META HTTP-EQUIV=\"Refresh\" content=\"0;URL=#{newpage}\">\n" + # use both techniques, because you never know how you might be corrupting yourself. + bodyText << "\t<script language=\"javascript\">setTimeout('window.location=\"#{newpage}\"', 1000);</script>\n" + end + + bodyText << "\t" << mangleTag('meta') + bodyText << "\t" << mangleTag('meta') + bodyText << "\t" << mangleTag('link') + + bodyText << "\t<title>[#@test_num] iExploder #{$VERSION} - #{inventValue()}</title>\n" + bodyText << "</head>\n\n" + + # What tags will we be messing with ###################### + tagList = [ 'body'] + + # we already have 5 tags? + 1.upto(@htmlMaxTags - 5 ) { tagList << @htmlTags[rand(@htmlTags.length)] } + + tagList.each { |tag| + bodyText << mangleTag(tag) + bodyText << inventValue() + "\n" + } + bodyText << "</body>\n</html>" + end +end + + + +if $0 == __FILE__ + max=ARGV[0].to_i + puts "testing #{max} tags" + test = IExploder.new(max, 5, 5) + test.readTagFiles() + test.test_num=1 + test.subtest_num=1 + counter=0 + test.lines=0 + + while test.lines < max + test.lines = test.subtest_num.div(max) + 1 + test.offset = test.subtest_num.modulo(max) + test.subtest_num=test.nextSubTestNum + counter = counter + 1 + puts "[#{counter}] subtest #{test.subtest_num} is #{test.lines} lines with #{test.offset} offset" + end + + puts "for #{max} tests, you will have #{counter} iterations until #{test.subtest_num}" +end + diff --git a/Tools/iExploder/htdocs/index.html b/Tools/iExploder/htdocs/index.html new file mode 100644 index 0000000..849bc6b --- /dev/null +++ b/Tools/iExploder/htdocs/index.html @@ -0,0 +1,34 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <title>iExploder 1.3.2</title> +</head> +<body> +<h2>iExploder: Web Browser Quality Assurance Tester</h2> +<small>Written by <a href="http://toadstool.se/">Thomas Strömberg</a> for the +<a href="http://www.mozilla.org/firefox/">Mozilla FireFox</a> project</small> + + +<ul> + <li><a href="iexploder.cgi">Start test sequence from the beginning!</a></li> + <li><a href="iexploder.cgi?random=1">Start test sequence in random</a></li> + <li>Start testing from a test number: + <form method="get" action="iexploder.cgi" name="test"> + Test: <input size="9" name="test" value="1"> Subtest: <input size="2" name="subtest" value=""> + <input value="Start" type="submit"> + </form> + </li> + + <li>Lookup a single test number: + <form method="get" action="iexploder.cgi" name="test"> + <input type="hidden" name="lookup" value="1"> + Test: <input size="9" name="test" value="1"> Subtest: <input size="2" name="subtest" value=""> + <input value="Lookup" type="submit"></form> + </li> +</ul> + +If your browser crashes, please contact thomas%stromberg.org! + +</body> +</html> + diff --git a/Tools/iExploder/htdocs/webserver.rb b/Tools/iExploder/htdocs/webserver.rb new file mode 100755 index 0000000..5176172 --- /dev/null +++ b/Tools/iExploder/htdocs/webserver.rb @@ -0,0 +1,75 @@ +#!/usr/bin/ruby +# iExploder - Generates bad HTML files to perform QA for web browsers. +# Developed for the Mozilla Foundation. +##################### +# +# Copyright (c) 2006 Thomas Stromberg <thomas%stromberg.org> +# +# This software is provided 'as-is', without any express or implied warranty. +# In no event will the authors be held liable for any damages arising from the +# use of this software. +# +# Permission is granted to anyone to use this software for any purpose, +# including commercial applications, and to alter it and redistribute it +# freely, subject to the following restrictions: +# +# 1. The origin of this software must not be misrepresented; you must not +# claim that you wrote the original software. If you use this software in a +# product, an acknowledgment in the product documentation would be appreciated +# but is not required. +# +# 2. Altered source versions must be plainly marked as such, and must not be +# misrepresented as being the original software. +# +# 3. This notice may not be removed or altered from any source distribution. + +require 'webrick' +require 'iexploder'; +require 'config'; + +include WEBrick +### THE INTERACTION ################################## +$ie_preload = IExploder.new($HTML_MAX_TAGS, $HTML_MAX_ATTRS, $CSS_MAX_PROPS) +$ie_preload.readTagFiles() +$ie_preload.url='/iexploder.cgi' + +if ARGV[0] + port = ARGV[0].to_i +else + port = 2000 +end + +puts "* iExploder #{$VERSION} will be available at http://localhost:#{port}" +puts "* Max Tags: #$HTML_MAX_TAGS Max Attrs: #$HTML_MAX_ATTRS Max Props: #$CSS_MAX_PROPS" +puts + +s = HTTPServer.new( :Port => port ) +class IEServlet < HTTPServlet::AbstractServlet + def do_GET(req, res) + ie = $ie_preload.dup + ie.test_num = req.query['test'].to_i + ie.subtest_num = req.query['subtest'].to_i || 0 + ie.random_mode = req.query['random'] + ie.lookup_mode = req.query['lookup'] + ie.stop_num = req.query['stop'].to_i + ie.setRandomSeed + + res['Content-Type'] = 'text/html' + res.body = ie.buildPage() + end +end + +class IEForm < HTTPServlet::AbstractServlet + def do_GET(req, res) + res['Content-Type'] = 'text/html' + res.body = File.open("index.html").readlines.join("\n") + end +end + + + +s.mount("/iexploder.cgi", IEServlet) +s.mount("/", IEForm) +trap("INT") { s.shutdown } + +s.start |