Web Performance
by Nicholas Boll
Who Am I?
- @NicholasBoll
-<EMAIL_ADDRESS>- I'm a Software Engineer at LogRhythm
- I've been doing web development for a long time
What is this talk about?
- Understanding performance
- Identifying problems
What is this talk not about?
- Micro-optimization
- Frameworks
Why not frameworks?
- Frameworks just make it easier to develop applications
- Your application determines performance
Understanding performance
More than "60 FPS"
RAIL performance model
- Response - 100ms
- Animation - 16ms
- Idle - 50ms
- Load - 1s
Response
- Respond to the user's action in under 100ms
- A user will perceive <100ms delay as instant
- Provide feedback if an action will take over 500ms (loading animation)
Animate
- 60 FPS = 16.66ms frame
- Your work should be under 10ms to sustain 60FPS
- Animation, scrolling and interaction (touchmove/mousemove)
- 1 UI thread for JS, DOM/CSSOM, Layout and Paint
Idle
- Break up work into 50ms chunks
- UI thread is blocked while JS is busy
- This is hard and very app dependent
Load
- <1s keeps the user's focus
- This one is hard in web applications
- Tools like Webpack chunks can help break up page loading
- Concepts like server-side rendering can help
Render pipeline
- JavaScript is only a portion of the pipeline
- JavaScript may or may not trigger the rest of the pipeline
- Some items may be skipped
- CSS Triggers - properties and what they trigger
Identifying problems
Tooling
Script bottlenecks
Demo - Profiles
Rendering Issues
Demo - Timeline
Loading Issues
Demo - Network


Numero de filas y columnas:
Start Game
Start Game
This explorer does not support canvas
This explorer does not support canvas


Lucy's Blog
What I've Learned So Far In My Development Adventure
Home
Twitter
LinkedIn
Version Control: What's in it for me?
School Daze: Classes, Ids, and You!
Don't Hash My Array, Man!
What's Up With #Map?
Classy Joint
Ruby vs. JavaScript
Ruby on Rails: A Quick & Dirty Primer
Getting in the Kitchen
Thinkin' Bout Thinkin'
Issues In Tech: Online Security
Just The Two of Us: A Reflection on Pairing
Addressing Stereotype Threat
Affirmation & Stereotype Threat
How Do You Deal With Conflict? An Interview With Myself
Asking Questions


Learning GraphQL? Practice with local GraphQL server in 5 simple steps:
-
From the command line (in a folder of your choice), run
git clone https://github.com/asa55/graphql-practice.git
-
From VSCode (using the "Remote - Containers" extension), "Open Folder In Container". (This step requires Docker)
-
From inside the container (VSCode's terminal works fine), run
node index.js
-
Using your favorite browser, visit localhost:4000
-
Play with GraphQL! Looking for a place to start? Check out my GraphQL notes on GitHub here


No. In a traditional pool, after a block is generated, the pool waits for 120 confirmations before paying out the block. When 120 confirmations are received, the balance moves from "unconfirmed" to "confirmed" and you are paid out, either automatically if set, or manually if you choose that option. You then wait for that payment transaction from the pool to your wallet to confirm before the coins are spendable. With p2pool, you receive the coins immediately the block is generated, however you must wait for 120 network confirmations to be able to spend them. So p2pool generated coins are spendable slightly sooner than those generated by a traditional pool.
Doesn't p2pool generate more stale shares?
P2Pool creates a "sharechain" similar to the main Dogecoin blockchain. On this chain, blocks take 10 seconds to generate. The main Dogecoin blockchain targets a 2.5 minute block time, so approximately every 2.5 minutes there is a window of opportunity for your worker to find a valid share in the previous block, but submit it once another worker already found a block - this is a stale share.
The shorter blocktime of the p2pool sharechain means this window of opportunity for a stale share to happen occurs more often, so you will have more stale shares, however this doesn't reduce your income provided that your stale percentage (Look for your Dogecoin address in the "Local Workers" section of the main page) is not higher than the average for all p2pool workers (See the "P2Pool Total" item, in the "Hash Rate" section of the main page). In fact, if your stale ratio is lower than the average, you profit from the stales generated by other workers, by having a higher overall percentage of the valid shares.
So, for example, even if your stales were 5%, and p2pool as a whole was generating a 6% ratio of stales, you would be making more on p2pool than you would on a traditional pool, since the stale ratio on the sharechain does not correspond to stale (orphaned) blocks on the main blockchain.
My worker is getting a lot of hardware errors
Because of the short blocktimes on the p2pool sharechain, your workers need to receive much lower difficulty work than they would in a traditional pool. They must finish their work and submit it before it goes stale - on the main blockchain, this would happen every time a block was generated (every 2.5 minutes on average), wheras on p2pool a new block on the sharechain happens every 10 seconds on average. Very low difficulty work often causes hardware errors. You can prevent this by telling p2pool the minimum difficulty your worker requires. You do this by appending a string to the end of your username (your Dogecoin address) in your miners startup command. The formula for calculating what to append is:
Dogecoin Address + 0.00000116 * Hash Rate in KH/s
0.00000116 * 350 = 0.000406
D7bBdhp4uwejabSM2Eui1j9w5SbGYbwwVd+0.000406
You don't want to set this value too high, or you will increase your stale shares - it sets the minimum difficulty for the shares you receive, and if you set it too high you will receive a large percentage of shares that are too difficulty for your worker to complete before the next block is generated, so the work will go stale. Setting this parameter is a balancing act between submitting work fast enough to avoid stales, and obtaining work that is difficult enough that it doesn't produce HW errors, or consume unnecessary bandwidth (if you have a very low minimum difficulty, your worker has to ask the pool for work too often, consuming extra bandwidth unnecessarily).
Here are some suggested values for various hashrates:KHash/s Difficulty 50 +0.00005821 100 +0.00011641 250 +0.00029103 500 +0.00058207 750 +0.00087310 1000 +0.00116414
Is p2pool Vardiff?
Yes, p2pool uses vardiff, but it is highly recommended to calculate your target difficulty as explained above for your workers hashrate. This will result in the optimum minimum size of work for your hashrate, reducing stale shares and consuming as little bandwidth as possible. It will also prevent hardware errors which can occur with worksizes that are too small.
If you have any problems, questions, or issues please find us on twitter @bemining.


Blazor - Official Release, Free Offer, and Future Plans I'm happy to announce the official release of DevExpress UI for Blazor. To help celebrate Blazor official launch at #dotnetconf, we're offering our this release to our customers free-of-charge!
3 as the sum of the 3 cubes - Numberphile A problem posed in 1953 is finally cracked by a network of computers in seven hours. More links & stuff in full description below ↓↓↓ Numberphile T-Shirts and stuff: https://teespring.com/stores/numberphile See our playlist previous videos on this area ...
.NET Design Review: GitHub Quick Reviews 00:00:00 - Approved: Add a Generic version of GetValues to Enum (probably GetName/GetNames) https://github.com/dotnet/corefx/issues/27453#issuecomment-534690642 00:24:12 - Approved: Add Path.RemoveRelativeSegments Api https://github.com/dotnet/corefx/iss...
davidfowl/BedrockFramework High performance, low level networking APIs for building custom servers and clients. - davidfowl/BedrockFramework
Windows Terminal Preview 1909 | Windows Command Line Welcome back to another release of the Windows Terminal! We have switched to the Windows version syntax, so this is the September 2019 release (1909). As always, you can download the latest release of the Terminal from the Microsoft Store or from the GitH...
[Linux] Add initial perf jitdump support · Issue #13462 · dotnet/runtime Linux uses the perf tools to profile application. The linux 4.10 kernel added support for a perf jitdump format. It has allows better JIT support for perf. Specifically allowing adding: native code...
Creating gRPC .NET Core Client Libraries - Steve Gordon In this post, I will show you how to easily create a shared class library which includes the auto-generate gRPC client code for reference by other projects.
UserSecrets Broken in VS 2019 16.3.0 - Developer Community Developer Community for Visual Studio Product family
Supreme Court bombshell: Britain is working once again Supreme Court judgement destroys Boris Johnson's attempt to silence parliament: In an extraordinary moment of political and legal drama, the British constitution stands firm against an out-of-control executive.
Welcome to .NET Conf 2019! Announcing .NET Core 3.0: https://aka.ms/dotnetcore3 #dotNETConf Filler after keynote that tells people what to expect for the day, how to participate in the technical treasure hunt and #CodeParty
Sagas Today has been a lively day in some parts of the Twitterverse debating the Saga pattern. As it stands, there are a few frameworks for .NET out there that use the term "Saga" for some framework implementation of a state machine or workflow. Trouble is, tha...
Announcing free C#, .NET, and ASP.NET for beginners video courses and tutorials - Scott Hanselman If you've been thinking about learning C#, now is the time to jump in! I've been working on this project for months and ...
Microsoft Launches New .NET Core Video Series - Thurrott.com Microsoft today released a new series of developer videos explaining the entire .NET Core stack.
Tips and Tricks for .NET Debugging in Visual Studio Announcing .NET Core 3.0: https://aka.ms/dotnetcore3 #dotNETConf Debugging is an inevitable but frustrating experience for every developer, but it's a subject that's not always taught or fully explored. This all-demo talk will cover known and lesser-kno...
What's New in SignalR with .NET Core 3.0? Announcing .NET Core 3.0: https://aka.ms/dotnetcore3 #dotNETConf .NET Core 3.0 brings a bevy of improvements to SignalR for developers who want to bring real-time to their apps. This session will cover these new features and introduce customers to the id...
Masters of the Fountain Pen：Kiyoshi Kato（Kato Seisakusho Com I claim no ownership of this video Posted for historical value. Just wish I could find the others in the series that disappeared. Original footage from
MiniProfiler/dotnet A simple but effective mini-profiler for ASP.NET (and Core) websites - MiniProfiler/dotnet
Modernizing .NET Desktop Applications with .NET Core Announcing .NET Core 3.0: https://aka.ms/dotnetcore3 #dotNETConf In this talk I'll provide an in-depth look at porting desktop applications to .NET Core 3 and cover different ways you can upgrade your WinForms and WPF applications such as leveraging Wind...
What's new in C# 8 - Part 2 Announcing .NET Core 3.0: https://aka.ms/dotnetcore3 #dotNETConf There's a lot more in C# 8: default interface members, async enumerables, ranges and indices, more pattern matching, and a host of other improvements. Join this talk for a whirlwind tour of...
What's new in C# 8 - Part 1 Announcing .NET Core 3.0: https://aka.ms/dotnetcore3 #dotNETConf How do you know whether a parameter you're passing or a result you're receiving can be null? With nullable reference types in C# 8.0 the answer is no longer
The Future of C++/CLI and .NET Core 3 | C++ Team Blog .NET Core 3.0 is now available and we have received a lot of questions about what that means for the future of C++/CLI. First, we would like to let everyone know that we are committed to supporting C++/CLI for .NET Core to enable easy interop between C++ ...


In October 1896, inventor and entrepreneur Emil Berliner abandoned the use of hard rubber as a plate material and replaced the substance with a molding compound produced by Duranoid Co., Newark, New Jersey, which consisted essentially of shellac as a binder and was originally developed for insulators had been. The shellac bound the other ingredients, the fillers barium sulfate, slate flour, soot and cotton flock, to a wear-resistant mass. The innovation improved the sound quality and durability of the plates enormously, but a disadvantage was the high brittleness and thus the risk of breakage.
However, as long as one wanted records that could be reproduced purely mechanically via a sound box, ie without electrical amplification, there was no viable alternative. In the US, several factors came together in the 1940s, suggesting a change from shellac material to PVC (vinyl): on the one hand turntables had prevailed with electric pickup, on the other hand shellac had to be imported.
Since vinyl records destined for children are a key selling point, they are virtually unbreakable, so in 1944 they began to press them in PVC, but still with a wide groove and 78 turns.
Vinyl records, where the other advantages of the material, that it allows lower playback speeds and thus a longer playing time, were exhausted, there was until 1948 only in the broadcasting as well as test and Demopressungen. Only then were vinyl records with micro grooves and suitable playback devices for use at home brought out.
Shellac plates were produced in the Federal Republic of Germany until 1958, in other European countries until the early and in the so-called Third World until the late 1960s.
The last plates are said to have been pressed in 1972 in South Africa. Until the early 1980s, almost all turntables were equipped with the speed setting of 78 min-1, could easily be provided with needles for shellac records and were thus suitable for this plate format.As early as 1880, the American physicist Charles Sumner Tainter (Columbia Graphophone Company) discovered that many of the technical disadvantages of Edisonian rollers (cumbersome handling and costly duplication) could be eliminated by spiraling the soundtrack into the surface of a flat, engraved round disc. Tainter developed the prototype of a corresponding recording apparatus and produced some recorded wax plates, but gave up the experiments due to technical problems after a short time again. Tainter's wax plates are now in the Smithsonian Institute in Washington. They are considered the first records in the world


Threshold must be an integer bigger than 1 and equal to or smaller than the number of outputs (1 < threshold <= number of outputs).
Computation parties must be an integer bigger than or equal to threshold and smaller than or equal to the number of outputs (threshold <= computation parties <= number of outputs).
This task does not meet all the requirements of this stereotype (exactly 1 input and at least 2 outputs are required).


|
Pallas Solver
0.1
C++ Global Optimization Algorithms
|
#include <simulated_annealing.h>
Public Member Functions | |
| void | set_step_function (scoped_ptr< StepFunction > &user_step_function) |
| Convenience function for changing the default step function. More... | |
Public Attributes | |
| CoolingSchedule::Options | cooling_schedule_options |
| GradientLocalMinimizer::Options | local_minimizer_options |
| scoped_ptr< StepFunction > | step_function |
| unsigned int | max_iterations |
| unsigned int | max_stagnant_iterations |
| unsigned int | dwell_iterations |
| double | minimum_cost |
| bool | polish_output |
| bool | is_silent |
| unsigned int | history_save_frequency |
Configurable options for modifying the default behaviour of the simulated annealing algorithm.
|
inline |
Convenience function for changing the default step function.
This function simply swaps the scoped_ptr to the user defined StepFunction
with the scoped_ptr to the StepFunction
held within the pallas::SimulatedAnnealing::Options
struct.
| user_step_function | pallas::scoped_ptr<pallas::StepFunction>. This function generates randomized candidate solutions based on the current position. |
| CoolingSchedule::Options pallas::SimulatedAnnealing::Options::cooling_schedule_options |
The annealing schedule to use. Must be one of ‘FAST’, ‘CAUCHY’ or ‘BOLTZMANN’. see pallas::CoolingSchedule.
| unsigned int pallas::SimulatedAnnealing::Options::dwell_iterations |
The number candidate solutions to generate before decreasing the temperature.
| unsigned int pallas::SimulatedAnnealing::Options::history_save_frequency |
Frequency to save the state of the system. Values will be appended to a HistorySeries
contained in the optimization summary. Default is 0. If 0 then history is not saved. Otherwise, the state of the system will be appended to the series when i % history_save_frequency == 0
. If there are a large number of iterations this can lead to a lot of data being stored in memory.
| bool pallas::SimulatedAnnealing::Options::is_silent |
Whether to log failure information relating the to global optimization algorithm using glog.
| GradientLocalMinimizer::Options pallas::SimulatedAnnealing::Options::local_minimizer_options |
Contains any changes to the default options for the local minimization algorithm. See the documentation for ceres::GradientProblemSolver::Options for relevant options
| unsigned int pallas::SimulatedAnnealing::Options::max_iterations |
Maximum number of simulated annealing iterations.
| unsigned int pallas::SimulatedAnnealing::Options::max_stagnant_iterations |
Maximum number sequential simulated annealing iterations allowed without finding a new global minimum.
| double pallas::SimulatedAnnealing::Options::minimum_cost |
User specified minimum cost. Minimization will halt if minimum_cost
is reached.
| bool pallas::SimulatedAnnealing::Options::polish_output |
Whether the global minimum found through differential evolution should be subjected to a local minimization "polishing" step before returning the result.
| scoped_ptr<StepFunction> pallas::SimulatedAnnealing::Options::step_function |
Function that produces randomized candidate solutions.


[1]
time required to aquire satelites must be returned to avoid.
[2]
time required to detour around heavy traffic but device kept rerouting me back to avoid.


The RGAA is the French government's General Accessibility Reference for Administrations. It is meant to provide a way to check compliance against WCAG 2.0.
Table of Contents
How to use the RGAA
The RGAA applies to any HTML content (HTML4, XHTML1, HTML5). For some tests, a reference baseline is used. This baseline takes into account a set of assistive technologies, browsers and operating systems, on which the accessibility of JavaScript-based interface components must be tested, among others. A detailed description is provided here: Baseline.
Important notice regarding HTML content prior to HTML5 specification
When the HTML code of the page is not HTML5, the HTML5 elements (tags and attributes) required by a criterion or test, are not applicable. Every other criteria or tests remain applicable, including those related to ARIA attributes, states or properties. The following criteria and tests are not applicable:
criterion 1.10;
criterion 9.2;
test 10.13.3;
test 11.10.1 (condition 2, relative to the HTML5 attribute required).
Validation process
For each criterion, compliance is defined as follows:
Compliant (C): all applicable tests are passed
Non Compliant (NC): at least one applicable test is failed
Not Applicable (NA): there is no content targeted by the criterion.
The RGAA proposes two additional compliance statuses:
Derogated (D): some contents targeted by the criterion will meet compliance by derogation
Not tested (NT): the criterion has not been tested.
Test 1.2.1: Does each decorative image (img tag), without caption and with an
alt attribute, meet the following conditions?:
The alt attribute has an empty value (alt="")
The decorative image does not have a title attribute
Test 1.2.2: Does each non clickable area (area tag with no
href attribute), not conveying any information, and with an alt attribute,
meet the following conditions?:
The alt attribute has an empty value (alt="")
The non clickable area does not have a title attribute
Test 1.2.3: For each image object without caption (object tag with the attribute type="image/"), not conveying any information, is the text alternative between
object and /object empty?
Test 1.2.4: Does each decorative vector image (svg tag), not conveying any information, and with an alternative, meet the following conditions?:
The svg tag has a role="img"
The svg tag, or one of its children, has no ARIA role, property or state, that aims at labeling the vector image (aria-label, aria-describedby, or
aria-labelledby, for example)
The title and desc tags are missing, or empty
The svg tag, or one of its children, has no title attribute
Test 1.2.5: For each decorative bitmap image (canvas tag), there must be no text content
between canvas and /canvas. Has this
rule been followed?
Test 1.3.1: Does each image (img tag)
conveying information, with an alt attribute, meet
the following conditions (except in particular
cases)?:
The alt attribute has a relevant value
If present, the value of the title attribute
matches the value of the alt attribute
Test 1.3.2: Does each area (area tag),
conveying information, and with an alt attribute,
meet the following conditions (except in particular
cases)?:
The alt attribute has a relevant value
If present, the value of the title attribute
matches the value of the alt attribute
Test 1.3.3: For each button associated
with an image (input tag with the attribute
type="image"), and with an alt attribute, is the content
of this attribute relevant (except in particular cases)?
Test 1.3.4: Does each image object
(object tag with the attribute type="image/"),
conveying information, meet one of the following
conditions (except in particular
cases)?
The image object is immediately followed by an
adjacent link giving access to a page or a chunk
of text containing a relevant alternative
The user can replace the image
object by a relevant text alternative, via a provided mechanism
The user can replace the image
object by an image with a relevant alternative, via a provided mechanism
Test 1.3.5: Does each embedded image
(embed tag with the attribute type="image/"),
conveying information, meet one of the following
conditions (except in particular
cases)?
The embedded image is immediately followed by an
adjacent link giving access to a page or a chunk
of text containing a relevant alternative
The user can replace the embedded image
by a relevant text alternative, via a provided mechanism
The user can replace the embedded image
by an image with a relevant alternative, via a provided mechanism
Test 1.3.6: Does each vector image (svg
tag), conveying information, and with an alternative, meet
one of the following conditions (except in particular
cases)?:
The svg tag has a role="img"
The svg tag has an aria-label property with a
relevant value, matching the title attribute of the
svg tag, if present
The svg tag has a desc tag with a relevant
content, equal to the title attribute of the svg
tag, if present
An adjacent link gives access to an alternative
with relevant content, equal to the title attribute
of the svg tag, if present
Test 1.3.7: For each vector image (svg tag), conveying
information, and with an alternative,
is this alternative correctly rendered by
assistive technologies?
Test 1.3.8: For each bitmap image (canvas tag),
conveying information, and with an alternative
(content between canvas and
/canvas), is this alternative correctly rendered by assistive technologies?
Test 1.3.9: For each bitmap image (canvas tag),
conveying information, and with an alternative
(content between canvas and
/canvas), is this alternative relevant?
Criterion 1.4 [A] For each image used as CAPTCHA
or as test image, with a text
alternative, does this alternative describe the nature and the purpose of the image?
Test 1.4.1: Does each image (img tag)
used as a CAPTCHA or test image, with an alt
attribute, meet the following conditions?
The content of the alt attribute describes the nature and purpose of the image
If present, the value of the title attribute
matches the value of the alt attribute
Test 1.4.2: Does each area (area tag) of an image map used as a CAPTCHA or test
image, with an alt attribute, meet the following conditions?
The content of the alt attribute describes the nature and purpose of the image
If present, the value of the title attribute
matches the value of the alt attribute
Test 1.4.3: For each button associated
with an image (input tag with the attribute
type="image"), used as a CAPTCHA or test image, with an
alt attribute, meet the following conditions?
The content of the alt attribute describes the nature and purpose of the image
If present, the value of the title attribute
matches the value of the alt attribute
Test 1.4.4: For each image object (object
tag with the attribute type="image/"), used
as a CAPTCHA or test image, with a text
alternative, does the text alternative describe the nature and purpose of the image?
Test 1.4.5: For each embedded image
(embed tag with the attribute type="image/"), used
as a CAPTCHA or test image, with a text
alternative, does the text alternative describe the nature and purpose of the image?
Test 1.4.6: Does each vector image (svg
tag), used as a CAPTCHA or test image, with a text alternative provided
via the aria-label property or the desc tag, meet the following conditions?
The text alternative provided via the
aria-label property describes the nature and purpose of the
image, and matches the value of the title
attribute of the svg tag, if present
The text alternative provided via the desc
tag describes the nature and purpose of the
image, and matches the value of the title
attribute of the svg tag, if present
Test 1.4.7: For each vector image (svg tag), used as a CAPTCHA or test image, with a text
alternative, is this alternative correctly rendered by assistive technologies?
Test 1.4.8: For each bitmap image (canvas tag), used
as a CAPTCHA or test image, with a text
alternative, does this alternative describe the nature and purpose of the image?
Test 1.4.9: For each bitmap image (canvas tag), used
as a CAPTCHA or test image, with a text
alternative, is this alternative
correctly rendered by assistive technologies?
Criterion 1.5 [A] For each image used as CAPTCHA,
is a solution for alternative access to the content or to
the purpose of the CAPTCHA available?
Test 1.5.1: Does each image (img,
area, object, embed, svg, canvas tags) used as CAPTCHA meet one of the following conditions?
Another non graphic form of CAPTCHA
is available, at least
Another solution to access the functionality
protected by the CAPTCHA
is available
Test 1.5.2: Does each button
associated with an image (input tag with the attribute
type="image") used as CAPTCHA
meet one of the following conditions?
Another non graphic form of CAPTCHA
is available, at least
Another solution to access the functionality
protected by the CAPTCHA
is available
Test 1.6.2: Does each image object
(object tag with an attribute type="image/")
conveying information needing a detailed
description, meet one of the following conditions?
There is a clearly identifiable detailed
description adjacent to the image object
Test 1.6.3: Does each embedded image
(embed tag with an attribute type="image/") conveying
information needing a detailed
description, meet one of the following conditions?
Test 1.6.6: For each vector image (svg tag), with a
reference to a detailed description provided via an
aria-label property or a desc tag, is this reference
correctly rendered by assistive technologies?
Test 1.6.7: Does each bitmap image
(canvas tag) conveying information needing a detailed
description, meet one of the following conditions?
There is a chunk of text between canvas
and /canvas referencing a detailed
description adjacent to the bitmap image
There is a text content between canvas and
/canvas serving as a detailed description
Test 1.6.8: For each bitmap image (canvas tag),
with a reference to an adjacent detailed
description, is this reference correctly rendered by assistive technologies?
Test 1.7.3: Does each embedded image
(embed tag with the attribute type="image/") with a
detailed description meet one of the following
conditions?
The detailed description adjacent to the embedded
image is relevant
The detailed description available via an adjacent
link is relevant
Test 1.7.4: Does each vector image
(svg tag) with a detailed description meet one of the
following conditions?
The detailed description adjacent to the vector
image is relevant
The detailed description available via an adjacent
link is relevant
Test 1.7.5: For each vector image (svg
tag) with a detailed description, is this detailed
description correctly rendered by assistive
technologies?
Test 1.7.6: Does each bitmap image
(canvas tag) with a detailed description meet one of the
following conditions?
The detailed description adjacent to the bitmap
image is relevant
The detailed description available between
canvas and /canvas is relevant
The detailed description available via an adjacent
link is relevant
Test 1.7.7: For each bitmap image
(canvas tag) with a detailed description between
canvas and /canvas, is this detailed
description correctly rendered by assistive
technologies?
Criterion 1.8 [AA] When an alternate
mechanism is missing, each image
of text conveying information must be replaced with
styled
text, if possible. Has this rule been followed (except in particular cases)?
Test 1.8.2: For each image
map (img or object tag with the usemap or ismap attribute),
when an alternate
mechanism is missing, each text
area (area tag) conveying information must be
replaced with styled
text if possible. Has this rule been followed (except in particular cases)?
Test 1.8.3: For each form tag, when
an alternate
mechanism is missing, each button "image of text"
(input tag with the attribute type="image") conveying
information must be replaced with styled
text, if possible. Has this rule been followed (except in particular cases)?
Test 1.8.5: When an alternate
mechanism is missing, each embedded image of text
(embed tag with the attribute type="image/")
conveying information must be replaced with styled
text if possible. Has this rule been followed (except in particular cases)?
Test 1.8.6: When an alternate
mechanism is missing, each bitmap image of text
(canvas tag) conveying information must be replaced with
styled
text if possible. Has this rule been followed (except in particular cases)?
Test 1.9.2: For each image
map (img or object tag with the usemap attribute),
each text
area (area tag) must be replaced with styled
text if possible. Has this rule been followed (except in particular cases)?
Test 1.9.3: For each form tag, each
button "image of text" (input tag with the attribute
type="image") must be replaced with styled
text if possible. Has this rule been followed (except in particular cases)?
Test 1.9.4: Each text
image object (object tag with the attribute
type="image/") must be replaced with styled
text if possible. Has this rule been followed (except in particular cases)?
Test 1.9.5: Each embedded image of
text (embed tag with the attribute type="image/")
must be replaced with styled
text if possible. Has this rule been followed (except in particular cases)?
Test 1.9.6: Each bitmap image of text
(canvas tag) must be replaced with styled
text if possible. Has this rule been followed (except in particular cases)?
Criterion 1.10
[A] Is each image caption correctly associated with the
corresponding image, if necessary?
Test 1.10.1: Does each image with a
caption (img tag or input tag with the attribute
type="image", associated with an adjacent caption) meet,
if necessary, the following conditions?
The image (img tag) and its caption are contained
in a figure tag
The figure tag has an attribute role="group"
The content of the alt attribute contains a
reference to the adjacent caption
The value of the title attribute of the image, if
present, is strictly equal to the value of the alt
attribute
Test 1.10.2: Does each image object with a caption (object tag with the attribute type="image/",
associated with an adjacent caption) meet, if necessary,
the following conditions?
The image (object tag) and its caption are
contained in a figure tag
The figure tag has an attribute role="group"
Test 1.10.3: Does each embedded image
with a caption (embed tag with the attribute
type="image/", associated with an adjacent caption)
meet, if necessary, the following conditions?
The embedded image (embed tag) and its caption
are contained in a figure tag
The figure tag has an attribute role="group"
The content of the alt attribute contains a
reference to the adjacent caption
The value of the title attribute of the image, if
present, is strictly equal to the value of the alt
attribute
Test 1.10.4: Does each vector image
with a caption (svg tag associated with an adjacent
caption) meet, if necessary, the following conditions?
The vector image (svg tag) and its caption are
contained in a figure tag
The figure tag has an attribute role="group"
The content of the aria-label property or the desc
tag of the vector image contains a reference to the
adjacent caption
The value of the title attribute of the vector
image (svg tag), if present, is strictly equal to
the content of the aria-label property or the desc
tag used as an alternative
Test 1.10.5: Does each bitmap image
with a caption (canvas tag associated with an adjacent
caption) meet, if necessary, the following conditions?
The bitmap image (canvas tag) and its caption are
contained in a figure tag
The figure tag has an attribute role="group"
The content between canvas and
/canvas contains a reference to the adjacent
caption
Do not provide information
through color only, and use sufficient color contrasts.
Criterion 3.1 [A] On each Web page, information must
not be conveyed only through color. Has this rule been
followed?
Test 3.1.1: For each word or for each
group of words where color is used to convey information,
information
must not be conveyed only through color. Has this rule been
followed?
Test 3.1.2: For each color indication
provided by a text, information
must not be conveyed only through color. Has this rule been
followed?
Test 3.1.3: For each image conveying
information, information
must not be conveyed only through color. Has this rule been
followed?
Test 3.1.5: For each time-based
media conveying information, information
must not be conveyed only through color. Has this rule been
followed?
Test 3.1.6: For each non-time-based
media conveying
information, information
must not be conveyed only through color. Has this rule been
followed?
Criterion 3.2 [A] On each Web page, information
must not be conveyed only through color. Has this rule been
implemented in a relevant way?
Test 3.2.1: For each word or a group
of words, whose color conveys information, information
must not be conveyed only through color. Has this rule been
implemented in a relevant way?
Test 3.2.2: For each information
conveyed through color and specified by a word or a group of
words, information
must not be conveyed only through color. Has this rule been
implemented in a relevant way?
Test 3.2.4: For each CSS element
background property conveying
information, information
must not be conveyed only through color. Has this rule been
implemented in a relevant way?
Test 3.2.5: For each time-based
media conveying
information, information
must not be conveyed only through color. Has this rule been
implemented in a relevant way?
Test 3.2.6: For each non
time-based media conveying
information, information
must not be conveyed only through color. Has this rule been
implemented in a relevant way?
Criterion 3.3 [AA] On each Web page, is
the contrast
between the text and background colors sufficient (except in particular cases)?
Test 3.3.1: On each Web page, do
non-bold texts and images of non-bold text with font sizes smaller than or equal to 150% of
the default font size (or 1.5em) meet one of the
following conditions (except
in particular cases)?
The contrast ratio between text and its
background is at least 4.5:1
The user can display the text with
a contrast ratio of at least 4.5:1, via a provided mechanism
Test 3.3.2: On each Web page, do bold
texts and images of bold text with font sizes smaller than or equal to 120% of the default font size (or
1.2em) meet one of the following conditions (except
in particular cases)?
The contrast ratio between text and its
background is at least 4.5:1
The user can display the text with a
contrast ratio of at least 4.5:1, via a provided mechanism
Test 3.3.3: On each Web page, do
non-bold texts and images of non-bold text with font sizes larger than 150% of the default font size (or 1.5em), meet one of
the following conditions (except in particular cases)?
The contrast ratio between text and its
background is at least 3:1
The user can display the text with a
contrast ratio of at least 3:1, via a provided mechanism
Test 3.3.4: On each Web page, do bold
texts and images of bold text with font sizes larger than 120%
of the default font size (or 1.2em), meet one
of the following conditions (except
in particular cases)?
The contrast ratio between text and its
background is at least 3:1
The user can display the text with a
contrast ratio of at least 3:1, via a provided mechanism
Criterion 3.4 [AAA] On each Web page, is
the contrast
between the text and background colors enhanced (except
in particular cases)?
Test 3.4.1: On each Web page, do
non-bold texts and images of non-bold text with font sizes smaller than or equal to 150% of
the default font size (or 1.5em) meet one of the
following conditions (except
in particular cases)?
The contrast ratio between text and its
background is at least 7:1
The user can display the text with
a contrast ratio of at least 7:1, via a provided mechanism
Test 3.4.2: On each Web page, do bold
texts and images of bold text with font sizes smaller than or equal to 120% of the default font size (or
1.2em) meet one of the following conditions (except
in particular cases)?
The contrast ratio between text and its
background is at least 7:1
The user can display the text with
a contrast ratio of at least 7:1, via a provided mechanism
Test 3.4.3: On each Web page, do
non-bold texts and images of non-bold text with font sizes larger than 150%
of the default font size (or 1.5em), meet one of
the following conditions (except
in particular cases)?
The contrast ratio between text and its
background is at least 4.5:1
The user can display the text with
a contrast ratio of at least 4.5:1, via a provided mechanism
Test 3.4.4: On each Web page, do bold
texts and images of bold text with font sizes larger than 120%
of the default font size (or 1.2em), meet one
of the following conditions (except
in particular cases)?
The contrast ratio between text and its
background is at least 4.5:1
The user can display the text with
a contrast ratio of at least 4.5:1, via a provided mechanism
If necessary, provide each time-based media with
relevant text
transcript, synchronized
captions and a synchronized audio description.
Provide each non time-based media with a relevant text
alternative. Make possible the viewing
control of each time-based and non time-based
media with the keyboard and ensure that they are
compatible with assistive technologies.
Test 4.3.2: For each prerecorded
synchronized time-based
media with synchronized
captions provided through a track tag, does the
track tag have an attribute kind="captions"?
Criterion 4.9 [AAA] Does each prerecorded
time-based
media have a sign language interpretation (except
in particular cases) if necessary?
Test 4.9.1: Does each prerecorded
audio-only time-based
media have a sign language interpretation if
necessary, that is adapted to the media language (except
in particular cases)?
Test 4.9.2: Does each prerecorded
synchronized time-based
media have a sign language interpretation, if
necessary, that is adapted to the media language (except
in particular cases)?
Criterion 4.10 [AAA] For each prerecorded
time-based
media with a sign language interpretation is this
interpretation relevant?
Test 4.10.1: For each prerecorded
audio-only time-based
media with a sign language interpretation, is this
interpretation relevant?
Test 4.10.2: For each prerecorded
synchronized time-based
media with a sign language interpretation, is this
interpretation relevant?
Test
4.15.1: For each audio-only, video-only or
synchronized time-based
media , does the adjacent textual content help
to clearly identify the time-based media (except
in particular cases)?
Test
4.15.2: For each live audio-only, live video-only or
live synchronized time-based
media , does the adjacent textual content help
to clearly identify the time-based media (except
in particular cases)?
The page to which the adjacent
link refers is accessible
The alternative in the page to which the adjacent
link refers is accessible.
Criterion 4.17 [A] For each non
time-based media with an alternative, is this
alternative relevant?
Test
4.17.1: For each non
time-based media with an alternative, does this
alternative provide access to the same content, and to
similar functionalities?
Test 4.18.1: Does each audio
sequence played automatically via an object, video,
audio, embed tag, a JavaScript code or bgsound
property meet one of the following conditions?
The audio sequence lasts 3
seconds or less
The audio sequence can be stopped by an action
initiated by the user
The volume of the audio sequence can be
controlled by the user independently from the system
volume control.
Criterion 4.19 [AAA] For each prerecorded
audio-only time-based
media, are the dialogues audible enough (except
in particular cases)?
Test 4.19.1: Does each prerecorded
audio time-based
media, played via an object, video,
audio, embed tag, or provided for download,
meet one of the following conditions (except
in particular cases)?
The background sounds can be turned off
The volume of the dialogue track(s) is 20
decibels higher than the volume of the background
sounds.
An alternative version, for which the background
sounds can be turned off, is available
An alternative version in which the volume of the
dialogue track(s) is 20 decibels higher than the
volume of the background sounds, is available.
Test
4.20.2: For each time-based media, does each control
feature meet one of the following conditions:
The control feature can be
reached by the keyboard and by the mouse?
A keyboard and mouse
accessible control feature,
performing the same action, is available in the
same page
Test
4.20.3: For each time-based media, does each control
feature meet one of the following conditions:
The control feature
can be activated by the keyboard and by the mouse?
A control feature,
performing the same action, and that can be
activated by the keyboard and by the mouse, is
available in the same page
Criterion 4.21 [A] Can each non
time-based media be controlled by the keyboard and
by the mouse?
Test
4.21.1: For each non time-based media, does each
control feature meet one of the following conditions:
The control feature can be
reached by the keyboard and by the mouse?
A keyboard and mouse
accessible control feature,
performing the same action, is available in the
same page
Test
4.21.2: For each non time-based media, does each
control feature meet one of the following conditions:
The control feature
can be activated by the keyboard and by the mouse?
A control feature,
performing the same action, and that can be
activated by the keyboard and by the mouse, is
available in the same page
Criterion 4.22 [A] Is each time-based
media and each non time-based media compatible with
assistive technologies (except
in particular cases)?
Test
4.22.1: Does each time-based
media and each non time-based media, inserted
via an object or embed tag, meet one of the following
conditions (except
in particular cases)?
Provide each complex data
table, with a relevant summary
and a title,
clearly identify header cells, use a relevant mechanism
to associate data cells with header cells. Ensure that
each layout table is correctly linearized.
Test 5.6.2: For each data
table (table tag), does each row
header have a th tag?
Criterion 5.7 [A] For each data
table, is each cell associated with its header using
the appropriate technique?
Test 5.7.1: Does each header cell (th
tag) applied to the whole row or to the whole column
have a unique id attribute or a scope attribute?
Test 5.7.2: Does each header cell (th
tag) applied to the whole row or the whole column and
having a scope attribute meet one of the following
conditions?
The header has a scope attribute with the value
"row" for row headers
The header has a scope attribute with the value
"col" for column headers
Test 5.7.3: Does each header cell (th
tag) that is not applied to the whole column meet the
following conditions?
The header does not have a scope attribute
The header has a unique id attribute
Test 5.7.4: Does each cell (td or th
tag) associated with one or several headers with an id attribute meet the following conditions?
The cell has a headers attribute
The headers attribute contains a list of values
matching the id attributes of the headers associated
with the cell.
Criterion 5.8 [A] Each layout
table must not use elements intended for data
tables. Has this rule been followed?
Test 5.8.1: Does each layout
table (table tag) meet the following conditions?
The layout
table (table tag) does not have any caption,
th, thead, tfoot tags
The cells of the layout
table (td tag) have no scope, headers,
colgroup, axis attributes.
Provide explicit link text, in particular, with context
information, and use the link
title as sparsely as possible. Add links or a
navigation form to the areas of a server-side image map.
The link
text alone is sufficient to understand the link
purpose and target
The link
context is sufficient to understand the link purpose
and target
Test 6.1.2: Does each image
link (content of the alt attribute, text between
canvas and /canvas, or text between
object and /object) meet one of the
following conditions (except in particular
cases)?
The link
text alone is sufficient to understand the link
purpose and target
The link
context is sufficient to understand the link purpose
and target
Test 6.1.3: Does each
link that doubles a clickable
area of a server-side image map meet one
of the following conditions (except in particular
cases)?
The link
text alone is sufficient to understand the link
purpose and target
The link
context is sufficient to understand the link purpose
and target
Provide, if necessary, each script
with a relevant alternative.
Make each script
controllable at least by keyboard and mouse, and ensure
that it is compatible with assistive technologies.
Criterion 7.1 [A] Does each script
support assistive technologies, if necessary?
Test 7.1.1:
Does each script
generating or controlling an interface component meet
one of the following conditions, if necessary?
Test 7.1.3:
Does each script
generating or controlling an interface component,
having roles, states or properties matching with an
ARIA API Design Pattern, meet one of the following
conditions?
The interface component
complies with the Design Pattern defined by the
ARIA API
An interface component,
available in the page, providing access to the same
functionalities, complies
with the Design Pattern defined by the ARIA API
An accessible interface
component providing access to the same
functionalities is available in the page
Test 7.1.4:
Does each change of native role of an HTML element
respect the rules and recommendations of the HTML5
specifications, and the associated technical notes?
Test 7.1.5:
Does each script
generating or controlling an interface component, via
roles, states or properties defined by the ARIA API,
meet one of the following conditions?
Test 7.2.1: Does each script
beginning with the script tag, and having an alternative,
meet one of the following conditions?
The alternative
between noscript and /noscript
provides access to similar content and functionalities
When JavaScript is disabled, the displayed page
provides access to similar content and functionalities
The alternative
page provides access to similar content and
functionalities
The server-side script language provides access to
similar content and functionalities
The alternative
available in the same page provides access to
similar content and functionalities
Test 7.2.2: Does each non text
element that is updated by a script
(in the page or an iframe) and that has an alternative
meet the following conditions?
The alternative
of the non text element is updated
Test 7.3.3: A script
must not remove focus from an element that receives it.
Has this rule been followed (except
in particular cases)?
Test 7.3.4: Does each interface
component implemented via a role defined by the ARIA
API, and matching a Design Pattern, meet one of the
following conditions?
The keyboard interactions comply with the Design
Pattern for the Esc, Space bar, Tab, and arrow keys,
at least
An interface component available in the page,
performing the same action, has keyboard
interactions complying with the Design Pattern for
the Esc, Space bar, Tab, and arrow keys, at least
An alternative providing access to the same
functionalities can be controlled by the keyboard
and the mouse.
Check that each Web page has a valid source code
according to the document
type, a relevant title and a
default human language identification. Check that
tags are not used for presentation only, that changes in
human language and changes in the direction of reading
order are specified.
Criterion 8.1 [A] Is each Web page defined
by a document
type?
Test 8.1.1: For each Web page, is the
document
type (doctype tag) available?
Test 8.1.2: For each Web page is the
document
type (doctype tag) valid?
Test 8.1.3: For each Web page with a
document
type declaration, is this declaration located
before the HTML tag in the source code?
Test 8.2.1: For each document
type declaration, does the page source code meet
the following conditions (except in particular cases)?
Tags follow the writing rules
Tag nesting is conform
Tag opening and closing are conform
Attributes follow the writing rules
The attribute values follow the writing rules
Test 8.2.2: For each document
type declaration, the page source code must not
contain obsolete elements. Has this rule been
followed (except in particular cases)?
Criterion 8.5 [A] Does each Web page have
a page
title?
Test 8.5.1: Does each Web page have a
page
title (title tag)?
Criterion 8.6 [A] For each Web page with a
page
title, is this title relevant?
Test 8.6.1: For each Web page with a
page
title (title tag), is the content of this tag
relevant?
Criterion 8.7 [AA] On each Web page, is
each change in the human language identified via the
source code (except
in particular cases)?
Test 8.7.1: On each Web page, does
each text written in a language differing from the
default human language meet one of the following
conditions (except
in particular cases)?
The human language identification is provided via
the element containing the text
The human language identification is provided via
one of the parent elements
Criterion 8.8 [AA] On each Web page, is
each change in human language relevant?
Test8.8.1: On each Web page, is each
change in human language identification (lang and/or
xml:lang attribute) technically valid?
Test 8.8.2: On each Web page, is each
change in human language identification (lang and/or
xml:lang attribute) relevant?
Criterion 8.9 [A] On each Web page, tags
must not be used only
for layout. Has this rule been followed?
Test 8.9.1: On each Web page, tags
must not be used (except div, span and table) only
for layout. Has this rule been followed?
Criterion 8.10 [A] On each Web page, are
changes in reading
direction identified?
Test 8.10.1: On each Web page, does
each text for which the reading direction is different
from the default reading
direction meet the following conditions?
the text is contained in an element with a dir
attribute
The value of the dir attribute is valid (rtl or
ltr)
Use headings,
landmarks, lists, abbreviations and quotes to structure
information.
Criterion 9.1 [A] On each Web page, is
information structured by the appropriate use of headings?
Test 9.1.1: Is there a level 1 heading
(h1 tag or a tag with an ARIA
role="heading" associated to an aria-level="1"
property) on each Web page?
Test 9.1.2: On each Web page, is the
hierarchy between the headings
(h1 to h6 tags or tags with an ARIA
role="heading" associated to an aria-level property)
relevant?
Test 9.1.3: On each Web page, when a
heading
(h1 to h6 tag or a tag with an ARIA
role="heading" associated to an aria-level property),
is necessary to structure information, is this heading available?
Test 9.1.4: On each Web page, is each
heading
(h1 to h6 tag or a tag with an ARIA
role="heading" associated to an aria-level property)
relevant?
Use style
sheets to control information presentation. Check
for the effect of font size increasing on readability.
Ensure that links can be correctly identified, that
focus is specified, that line spacing is suffiscient,
and give the user the ability to control text
justification. Ensure that hidden texts are rendered
properly and that information is not conveyed only by an
element's shape, size or location.
Criterion 10.4 [AA] On each Web page, is
text still readable when character
size is increased until at least 200%?
Test 10.4.1: In the style
sheets of the website,
non relative units (pt, pc, mm, cm, in) must not be used
for the media types screen, tv, handheld, projection.
Has this rule been followed?
Test 10.4.2: In the style
sheets of the website,
for the media types screen,
tv, handheld, projection, do font sizes use
relative units only?
Test 10.4.3: On each Web page,
increasing the character
size up to 200% must not cause loss of
information. Has this rule been followed?
Criterion 10.5 [AA] On each Web page, are
CSS declarations for background and foreground colors
appropriate?
Test 10.5.1: On each Web page, for
each element that may contain text, is the CSS
declaration for foreground color accompanied by a
background color declaration at least, inherited from a
parent element?
Test 10.5.2: On each Web page, for
each element that may contain text, is the CSS
declaration for background color accompanied by a
foreground color declaration at least, inherited from a
parent element?
Test 10.5.3: On each Web page, for
each element that may contain text, if an image is used
to provide a background color via CSS, is there a
corresponding background color declaration, at least,
inherited from a parent element?
Test 10.6.1: On each Web page, does
each text
link indicated through color alone, and whose nature is
not obvious, have a contrast ratio of 3:1 or greater
with the surrounding text?
Criterion 10.7 [A] On each Web page, is
the focus
visible for each element that receives focus?
Test 10.7.1: For each element
receiving focus, the browser default visual cue must not
be removed (CSS property outline, outline-color,
outline-width, outline-style). Has this rule been
followed?
Test 10.7.2: For each element
receiving focus, the browser default visual cue must not
be degraded (CSS property outline-color). Has this rule
been followed?
Test 10.7.3: Does each link inside a
text, indicated through color alone, meet the conditions
below?
An additional visual cue, other than color, is
provided when the user tabs to the link with the
keyboard
An additional visual cue, other than color, is
provided when the user points to the link (hovers)
with the mouse
Criterion 10.8 [AAA] On each Web page,
can the user specify the background and foreground colors?
Test 10.8.1: For each block of text
inside an HTML element, can the background color be
specified by the user?
Test 10.8.2: For each block of text
inside an HTML element, can the foreground color be
specified by the user?
Test 10.8.3: For each block of text
inside an object, embed, svg
or canvas tag, can the background color be
specified by the user?
Test 10.8.4: For each block of text
inside an object, embed, svg
or canvas tag, can the foreground color be
specified by the user?
Criterion 10.9 [AAA] for each Web page,
text must not be fully justified. Has this rule been followed?
Test 10.9.1: Does each Web page meet
one of the following conditions?
The text is not fully justified
The user can remove the
full justification of text, via a provided mechanism
Criterion 10.10 [AAA] For each Web page,
on a full-screen window and with a font size of 200%, is
each block of text still readable without the use of
horizontal scrolling?
Test 10.10.1: On each Web page,
does increasing the text
size up to 200% meet one of the following
conditions?
In a full-screen window, the use of horizontal
scrolling is not required to read a block of text
The user can display, via a provided mechanism, a version of the content where the use of horizontal
scrolling is not required to read a block of text, in a
full-screen window
Criterion 10.11 [AAA] For each Web page,
is the length of lines of text equal to 80 characters or
less (except in particular cases)?
Test 10.11.1: For each Web page,
does each line of text meet one of the following
conditions (except in particular cases)?
The length of each line of text is equal to 80
characters or less
The user can reduce the length of each line of
text, down to 80 characters or less, when resizing
the browser window
Criterion 10.12 [AAA] For each Web page,
is line and paragraph spacing sufficient?
Test 10.12.1: For each Web page,
does each block of text meet one of the following
conditions?
The line spacing is 1.5 times the text size, or
more
The user can increase the line spacing
to at least 1.5 times the text size, via a provided mechanism
Test 10.12.2: For each Web page,
does each block of text meet one of the following
conditions?
The spacing between two paragraphs is 1.5 times
the line spacing, or more
The user can increase the spacing between two paragraphs
to at least 1.5 times the line spacing, via a provided mechanism
Criterion 10.13 [A] For each Web page,
are hidden
texts rendered properly by assistive technologies?
Test 10.13.1: On each Web page, does
each hidden
text meet one of the following conditions?
The text is not intended to be rendered by
assistive technologies
The text is made visible on user action on the
element itself or on an element before the hidden
text
The hidden
text is part of a user interface
component ruled by the ARIA API, which manages the
displayed or hidden status of the content
Test
10.13.2: On each Web page, does each hidden
text using an ARIA property aria-hidden meet one
of the following conditions?
The text is not intended
to be rendered by assistive technologies
The value of the ARIA
property aria-hidden matches the visible or hidden
status of the text
Test
10.13.3: On each Web page, does each hidden
text using the hidden attribute meet one of the
following conditions?
The text is not intended
to be rendered by assistive technologies
The text is made
visible on user action on the element itself or on
an element before the hidden
text
The hidden
text is part
of a user interface component ruled by the ARIA
API, which manages the displayed or hidden status
of the content
Test 10.14.1: On each Web page, for
each text or set of text, information must not be
conveyed by shape, size or location alone. Has this rule
been followed?
Test 10.14.2: On each Web page, for
each image or set of images, information must not be
conveyed by shape, size or location alone. Has this rule
been followed?
Criterion 10.15 [A] On each Web page,
information must not be conveyed by shape, size or location alone. Has this rule been implemented in a
relevant way?
Test 10.15.1: On each Web page, for
each text or set of text, information must not be
conveyed by shape, size or location alone. Has this rule
been implemented in a relevant way?
Test 10.15.2: On each Web page, for
each image or set of images, information must not be
conveyed by shape, size or location alone. Has this rule
been implemented in a relevant way?
For each form, associate each control with its label,
group controls in similar blocks of information,
structure selection lists in a consistent way, give each
button
an explicit label. Check that input help is available,
ensure that the input
control is accessible and that the user can
control financial, legal or personal data.
Test 11.5.1: In each form, is the information of same nature grouped together via a fieldset tag, if necessary?
Criterion 11.6 [A] In each form, does
each form field grouping have a legend?
Test 11.6.1: Is each form field
grouping (fieldset tag) followed by a legend (legend
tag) in the source code?
Criterion 11.7 [A] In each form, is each
legend, related to a form field grouping, relevant?
Test 11.7.1: In each form, is each
legend (legend tag), related to a form field grouping
(fieldset tag), relevant?
Criterion 11.8 [A] In each form, is each
selection
list structured in a relevant way?
Test 11.8.1: In each form, are for
each selection
list (select tag) items grouped together with an
optgroup tag, if necessary?
Test 11.8.2: In each selection
list (select tag), does each list item grouping
(optgroup tag) have a label attribute?
Test 11.8.3: For each list item
grouping (optgroup tag) with a label attribute, is the
content of the label attribute relevant?
Criterion 11.9 [A] In each form, is the
text of each button
relevant?
Test 11.9.1: In each form, does the
text of each button
meet one of the following conditions?
The content of the value attribute of the form
buttons of type submit, reset or button is relevant
The content of the button tag is relevant
The content of the title
attribute is relevant
The content of the ARIA
property aria-label is relevant
Test
11.9.2: In each form, does the text of each button
implemented via an ARIA property aria-labelledby meet
the following conditions?
The referenced chunk of
text has an id attribute
The value of the id
attribute is unique
The value of the ARIA
property aria-labelledby matches the value of the
id attribute of the chunk of text
The chunk of text is
relevant
Criterion 11.10 [A] In each form, is the
input
control used in a relevant way?
Test
11.10.1: For each form, do mandatory fields
indications meet one of the following conditions?
The
mandatory field indication is provided via a chunk
of text before the form field
The
mandatory field indication is provided via a
"required" attribute
The
mandatory field indication is provided via an
aria-required ARIA property
The
mandatory field indication is provided via the label
(label tag, or title attribute, or aria-label
property, or labelling chunk of text identified via
the aria-labelledby property) of the form field
The
mandatory field indication is provided via a chunk
of text, tied to the form field via the
aria-describedby ARIA property
Test
11.10.2: Each mandatory field indication based on the
ARIA properties aria-label, aria-required, or the
"required" attribute, must have an explicit visual cue
in its label (label tag) or in a chunk of text tied to
the form field via the ARIA property aria-describedby
or aria-labelledby. Has this rule been followed?
Test
11.10.3: Does each mandatory field indication provided
via a chunk of text tied by an ARIA property
aria-describedby or aria-labelledby meet the following
conditions?
The referenced chunk of
text has an id attribute
The value of the id attribute is unique
The value of the ARIA
property aria-describedby or aria-labelledby matches
the value of the id attribute
Test
11.10.4: For each form, do the input errors meet one
of the following conditions?
The input error message
is provided via the label (label tag, or title
attribute, or aria-label property, or labelling
chunk of text identified via the aria-labelledby
property) of the form field
The input error message is
provided via a chunk of text before the form field
The form field has a type
that automatically generates an input error message
The input error message is
provided via a chunk of text tied to the form field
via the ARIA property aria-describedby
The input error is
signaled via the ARIA property aria-invalid
Test 11.10.5: Each input
error indication based on the ARIA properties
aria-label or aria-invalid must have an explicit
visual cue in the label (label tag) or in a chunk of
text tied to the form field via the ARIA property
aria-describedby or aria-labelledby. Has this rule
been followed?
Test
11.10.6: Does each input error indication provided via
a chunk of text tied by an ARIA property
aria-describedby or aria-labelledby meet the following
conditions?
The referenced chunk of
text has an id attribute
The value of the id
attribute is unique
The value of the ARIA
property aria-describedby or aria-labelledby matches
the value of the id attribute
Test
11.10.7: For each form, does each mandatory field meet
one of the following conditions?
The data
type and/or format is provided, if necessary, via
the field label (label tag, or title attribute, or
aria-label property, or labelling chunk of text
identified via the aria-labelledby property)
The data
type and/or format is provided, if necessary, via a
chunk of text before the form field
The data
type and/or format is provided via a chunk of text,
tied to the form field via the aria-describedby ARIA
property
Test
11.10.8: Each data type and/or format indication based
on the ARIA properties aria-label must have an
explicit visual cue in its label (label tag) or in a
chunk of text tied to the form field via the ARIA
property aria-describedby or aria-labelledby. Has this
rule been followed?
Test
11.10.9: Does each data type and/or format indication
provided via a chunk of text tied by an ARIA property
aria-describedby or aria-labelledby meet the following
conditions?
The referenced chunk of
text has an id attribute
The value of the id
attribute is unique
The value of the ARIA
property aria-describedby or aria-labelledby matches
the value of the id attribute
Criterion 11.11 [AA] In each form, is input
control accompanied, if necessary,
by suggestions helping with the correction of input
errors?
Test 11.11.1: For each form, for
each input error, are each data
types and formats suggested, if necessary?
Test 11.11.2: For each form, for
each input error, are examples for expected values
suggested, if necessary?
Criterion 11.12 [AA] For each form, can
financial, legal or personal data be changed, updated or
retrieved by the user?
Test 11.12.1: For each form, do the
input of financial, legal or personal data meet one of
the following conditions?
The user can change or reset the data, and cancel
actions made on these data after they have been
entered
The user can check and modify data before form
submission
An explicit confirmation mechanism, via a form
field or an additional step, is available
Test 11.12.2: For each form, does
the deletion of financial, legal or personal data meet
one of the following conditions?
The user can recover data that have been
deleted, via a provided mechanism
An explicit mechanism confirming deletion, via a
form field or an additional step, is available
Criterion 11.13 [AAA] For each form, can
all data be changed, updated or recovered by the user?
Test 11.13.1: For each form, does
data input meet one of the following conditions?
The user can change or cancel data and actions on
this data after it has been entered
The user can check and correct data before form
submission
An explicit confirmation mechanism, via a form
field or an additional step, is available
Test 11.13.2: For each form, does
data deletion meet one of the following conditions?
The user can recover data that have been
deleted, via a provided mechanism
An explicit mechanism confirming deletion, via a
form field or an additional step, is available
Criterion 11.14 [AAA] For each form, is
input assistance available?
Test 11.14.1: Does each form meet
one of the following conditions?
There is a link to a help page
Indications before the form are available
Indications before form fields are available
Indications are provided
via the form field label (label tag, or title
attribute, or aria-label property, or labelling
chunk of text identified via the aria-labelledby
property)
Indications are provided
via a chunk of text, tied to the form field via
the aria-describedby ARIA property
an assistant is available
Test
11.14.2: Each indication based on the ARIA property
aria-label must have an explicit visual cue. Has this
rule been followed?
Test
11.14.3: Does each indication provided via a chunk of
text tied by an ARIA property aria-describedby meet
the following conditions?
The referenced chunk of
text has an id attribute
The value of the id
attribute is unique
The value of the ARIA
property aria-describedby matches the value of the id
attribute
Test 11.14.4: Does each field of
type text meet one of the following conditions, if
necessary?
A spell checking tool is available
Input suggestions are
provided before the form field
Input suggestions are
provided via the form field label (label tag, or
title attribute, or aria-label property, or
labelling chunk of text identified via the
aria-labelledby property)
Input
suggestions are provided via a chunk of text, tied
to the form field via the aria-describedby ARIA
property
Test 11.14.5: Each input
suggestion based on the ARIA property aria-label must
have an explicit visual cue. Has this rule been
followed?
Test
11.14.6: Does each input suggestion provided via a
chunk of text tied by an ARIA property
aria-describedby meet the following conditions?
The referenced chunk of
text has an id attribute
The value of the id
attribute is unique
The value of the ARIA
property aria-describedby matches the value of the id
attribute
Criterion 11.15 [AAA] For each form, is
each input assistance relevant?
Test 11.15.1: For each form, is
each input assistance relevant?
Facilitate navigation in a set
of pages through at least two different navigation
systems (navigation
menu, site map or search
engine), breadcrumb trail and the indication of
the active page in the navigation menu. Identify groups
of important links and the main content area, and provide the
ability to avoid them through internal navigation links.
Ensure that tabbing order is consistent and that the
page does not contain keyboard traps.
Criterion 12.8 [AAA] On each Web page, is a
breadcrumb trail available (except in particular cases)?
Test 12.8.1: On each web page, is a breadcrumb trail
available (except in particular cases)?
Criterion 12.9 [AAA] On each Web page, is
the breadcrumb trail relevant?
Test 12.9.1: On each Web page, does
the breadcrumb trail represents the page position in the
site structure?
Criterion 12.10 [A] On each Web page,
are groups of important links (menu, navigation bar)
and the main content area identified (except in particular cases)?
Test 12.10.1: On each Web page, is
each group of important links implemented in a single tag?
Test 12.10.2: On each Web page, does
each group of important links meet one of the following
conditions?
The element that structures the group of
important links has an id attribute
The element that structures the group of
important links is immediately preceeded, in the
source code, with a named anchor
the first link in the group is immediately
preceeded, in the source code, with a named anchor
Test 12.10.3: On each Web page,
does the main content area meet one of the following
conditions?
Test 12.13.1: On each Web page, is
the tabbing order through the content consistent
?
Test 12.13.2: For each script
that updates or inserts content, does tabbing order
remain consistent?
Criterion 12.14 [A] On each Web page,
navigation must not contain keyboard trap. Has this rule
been followed?
Test 12.14.1: On each Web page, does
each element that receives focus meet one of the
following conditions?
It is possible to reach the next or previous
element that can receive focus with the tab key
The user is informed about the existence of a functional mechanism,
allowing to reach the next or previous element that
can receive focus with the keyboard
Check that the user can control the refresh processes,
sudden changes in luminosity, openings of new windows and
moving or blinking content. Specify when a content opens
in a new window and provide information regarding
viewing of files to download. Do not make the completion
of a task rely upon a time limit except if it is
essential and ensure that entered data is retrieved
after an authenticated session has expired. Ensure that
unusual phrases and jargon are made explicit. Provide
accessible versions or make downloadable documents
accessible.
Criterion 13.1 [A] For each Web page, can
the user control each time limit that modifies content (except in particular cases)?
The user can increase the time limit between two
refresh processes by at least a factor of ten
The user is warned about the imminence of the
refresh, and has at least 20 seconds to increase
the time limit before the next refresh
The time limit between two refresh processes is at least
twenty hours
Test 13.1.2: For each Web page, is
each redirection initiated via the meta tag
immediate (except in particular cases)?
Test 13.1.3: For each Web page, does
each redirect process initiated via a script
meet one of the following conditions (except in particular cases)?
the user can stop or restart the redirect
the user can increase the time limit to at least
ten times before redirection
The user is warned about the imminence of the
redirection and has at least twenty seconds to
increase the time limit before the next redirection
The time limit before the redirection is at least
twenty hours
Test 13.1.4: For each Web page, does
each server-side redirect process meet one of the
following conditions (except in particular cases)?
The user can stop or restart the redirection
The user can increase the time limit before the
redirection to at least ten times
The user is warned about the imminence of the
redirection and has at least twenty seconds to
increase the time limit before the next redirection
Time limit before redirection is at least twenty
hours
Test 13.1.5: For each Web page, does
each process restricting a session time meet one of the
following conditions (except in particular cases)?
The user can suppress time limit
The user can increase time limit
Time limit before the session expires is at least
twenty hours.
Criterion 13.2 [A] On each Web page, is
the user warned each time a new window opens?
Test 13.2.1: On each Web page, for
each new window opening launched via a link
(target="_blank" attribute) or a JavaScript command, is
the user warned?
Test 13.2.2: On each Web page, for
each window opening launched via an object, applet or
embed tag, is the user warned?
Test 13.2.3: On each Web page, for
each window opening launched via a form control, is the
user warned?
Criterion 13.3 [A] On each Web page, the
opening of a new window must not happen without user
action. Has this rule been followed?
Test 13.3.1: On each Web page, the
opening of a new window must not be launched without
user action. Has this rule been followed?
Criterion 13.4 [AAA] On each Web page, a
task must not require a time limit to be completed, except
if it occurs in real time or if this time limit is
essential. Has this rule been followed?
Test 13.4.1: On each Web page, does
each task with a time limit meet one of the following
conditions?
The task occurs in real time
The task requires a time limit that is essential
for the task to occur successfully
Criterion 13.5 [AAA] On each Web page,
when an authenticated session is interrupted, is the data
entered by the user retrieved after re-authenticating?
Test 13.5.1: On each Web page, when
an authenticated session is interrupted, is the data
entered by the user retrieved after re-authenticating?
Criterion 13.6 [A] On each Web page, for
each file that can be downloaded, is there sufficient
information provided (except in particular cases)?
Test 13.6.1: On each Web page, does
each file that can be downloaded via a link or a form
have information about its format (except in particular cases)?
Test 13.6.2: On each Web page, does
each file that can be downloaded via a link or a form
have information about its weight (except in particular cases)?
Test 13.6.3: On each Web page, does
each file that can be downloaded via a link or a form
have information about its human language if necessary (except in particular cases)?
Test 13.7.1: On each Web page, does
each downloading functionality for an electronic
document meet one of the following conditions (except in particular cases)?
Criterion 13.8 [A] For each electronic
document with an accessible version, does this version
provide the same information?
Test 13.8.1: Does each electronic
document with an accessible version meet one of the
following conditions?
The accessibility-supported version provides the
same information
The alternative version in HTML format is
relevant and provides the same information
Criterion 13.9 [AAA] On each Web page,
are unusual phrases, idioms or jargon made explicit?
Test 13.9.1: On each Web page, does
each phrase used in an unusual or restricted way, each
idiom or jargon meet one of the following conditions?
A definition is available in the context right
next to the phrase and is specified by the dfn tag
A definition is available via a definition list
A definition is available in the page
The phrase is contained in a link giving to
access to the definition.
Criterion 13.10 [AAA] On each Web page,
for each phrase used in an unusual or restricted way, each
idiom or jargon with a definition, is this definition
relevant?
Test 13.10.1: On each Web page, for
each phrase used in an unusual or restricted way, idiom
or jargon with a definition, does this definition meet
one of the following conditions?
The content of the associated definition is
relevant
The content of the dd tag of the definition list
is relevant
The definition provided by the adjacent context
is relevant.
Criterion 13.11 [A] On each Web page,
does each cryptical content (ASCII art, emoticon,
cryptical syntax) have an alternative?
Test 13.11.1: On each Web page,
does each cryptical content (ASCII art, emoticon,
cryptical syntax) meet one of the following conditions?
A title attribute is available
A definition is provided by the adjacent context
Criterion 13.12 [A] On each Web page,
for each cryptical content (ASCII art, emoticon, cryptical
syntax) with an alternative, is this alternative relevant?
Test 13.12.1: On each Web page,
does each cryptical content (ASCII art, emoticon,
cryptical syntax) meet one of the following conditions?
the content of the title attribute is relevant
the definition provided by the adjacent context
is relevant
Criterion 13.13 [AAA] On each Web page,
for each word whose meaning cannot be understood without
knowing the pronunciation, is this pronunciation
specified?
Test 13.13.1: On each Web page, does
each word whose meaning cannot be understood without
knowing the pronunciation, meet one of the following
conditions?
The phonetic pronunciation is available in the
adjacent context
The phonetic pronunciation is accessible via a
link
Criterion 13.14 [AAA] On each Web page,
does each text that requires a reading ability more
advanced than the lower secondary education level have an
alternative version?
Test 13.14.1: On each Web page,
does each text that requires a reading ability more
advanced than the lower secondary education level
(except for proper names and title) meet one of the
following conditions?
An illustration or graphic symbols adapted to the
reading level of the lower secondary education level
are available
A version in sign language (adapted to the human
language of the content) is available
A spoken version of the text is available
A summary adapted to the reading level of the
lower secondary education level is available.
Test 13.15.1: On each Web page, does
each animated image (img tag, svg tag, or object tag)
causing a suddent change in luminosity or a flashing
effect meet one of the following conditions?
The effect's frequency is lower than 3 per
second
The cumulated area of effects is smaller than
or equal to 21,824 pixels
Test 13.15.2: On each Web page,
does each script
causing a sudden change in luminosity or a flashing
effect meet one of the following conditions?
The effect's frequency is lower than 3 per second
The cumulated area of the effects is less
than or equal to 21,824 pixels
Test 13.15.3: On each Web page,
does each CSS layout causing a sudden change in
luminosity or a flashing effect meet one of the following
conditions?
The effect's frequency is lower than 3 per second
The cumulated area of the effects is less
than or equal to 21,824 pixels
Test 13.15.4: On each Web page,
does each Java applet causing a sudden change in
luminosity or a flashing effect meet one of the following
conditions?
The effect's frequency is lower than 3 per second
The cumulated area of the effects is less
than or equal to 21,824 pixels
Test 13.16.1: On each Web page, does
each sudden change in luminosity or a flashing effect
caused by an animated image (img tag, svg
tag, embed tag, canvas tag, or object tag) have
a frequency lower than or equal to 3 per second?
Test 13.16.2: On each Web page,
does each sudden change in luminosity or a flashing
effect caused by a script
have a frequency lower than or equal to 3 per second?
Test 13.16.3: On each Web page,
does each sudden change in luminosity or a flashing
effect caused by CSS layout have a frequency lower than
or equal to 3 per second?
Criterion 13.17 [A] On each Web page,
can each moving or blinking content be controlled
by the user?
Test 13.17.1: On each Web page, does
each moving content that starts moving automatically, meet one
of the following conditions?
The motion stops within 5 seconds
The user can stop and restart the motion
The user can display or hide the moving content
The user can display the same information without moving content.
Test 13.17.2: On each Web page,
does each blinking content that starts blinking automatically,
meet one of the following conditions?
The blinking stops within 5 seconds
The user can stop and restart the blinking
The user can display and hide the blinking content
The user can display the whole information without blinking content.


MicroPython
MicroPython brings the Python scripting language to small microcontrollers. While TinyCLR OS with .NET C# and full debugging is the recommended path for building secure and modern devices there are instances where using MicroPython can be useful.
The MicroPython project is found at http://www.micropython.org/. GHI Electronics makes a ready-to-use MicroPython build for some of its products.
Some areas where MicroPython shines:
- No complex software tools to setup. MicroPython is all-self-contained. Any serial terminal is enough to command/control/update the device.
- REPL allows for writing pure code on the device directly, where the device itself would compile and interpret.
- Python is a powerful scripting language that is relatively-easy to learn.
- Develop on any operating system as long as there is a terminal software!
Reasons to use TinyCLR OS over MicroPython:
- True secure hardware with many security services.
- Solid and complete networking support.
- Full fledged debugging experience.
- Works with world-class Microsoft Visual Studio.
- NuGet cloud hosted libraries.
- C# is C's big sister, which is the global language for coding, especially on small devices.
The GHI Electronics fork of MicroPython is found here.
Getting Started
Deploy your first MicroPython program.
Learn more...
Tutorials
Learn MicroPython embedded programming.
Learn more...
Downloads
Necessary Downloads.
Learn more...
Release Notes
Find the latest changes to MicroPython.
Learn more...


a file to define RWTRobotMonitor.DiagnosticsDirectory class Author: Ryohei Ueda Source: DiagnosticsDirectory.js, line 3
a file to define RWTRobotMonitor.DiagnosticsHistory class. Author: Ryohei Ueda Source: DiagnosticsHistory.js, line 3
a file to define RWTRobotMonitor.DiagnosticsStatus class. Author: Ryohei Ueda Source: DiagnosticsStatus.js, line 3


httplib
The HTTPlib is a collection of classes to handle with HTTP Headers
(reading / creating them). They are used by the webserver, so normally there
is no need to use them as long as you don't use IWebserverPassthrough.
There it could become in handy using the HTTPlib classes to handle the HTTP header stuff.
After setting the version number and the HTTP result (or the HTTP request method),
the header is prepared to be send. You can set what ever field you whant to and
send that header directly by getting the buffer to the byte-stream and the size of it.
So there is no need for any other function to prepare a http header.
Just set the version, the request or result, what ever field you whant to set more
(it will always be a good idea to set at least the content length, even if
it will be 0) and send the header.
HTTPHeader
This class is only for creating an HTTP header.
To parse an HTTP Header and get the data of it, use HTTPParser.
- void SetHTTPVersion(int major, int minor)
-
Sets the major and minor version of the HTTP protocol you whant to use.
You can call HTTPParser::GetMajorVersion() / HTTPParser::GetMinorVersion()
to set the same version for the response as had been used for the request.
This function has to be use before using any other function, or the header you're
going to build up will be incorrect.
However, if you need to build a HTTP header multiple times, you can reuse
a HTTPHeader instance, setting the version only once and reuse it by setting
the HTTP result code at first.
- SetHTTPResult(const http_result_t * result)
-
Set's the result code for the HTTP header. result must be one of the HTTP_*
result constants.
This function will reset all other, previous set header data (except the HTTP version).
So by setting the Resutl code first (which must be done before setting other fields),
you can reuse an already existing HTTPHeader object. See below for a list of defined HTTP_* constants.
- void SetContentSize(size_t size)
-
Use it to set the Content-Lenght field with the given length;
- void SetContentSize(size_t start, size_t end, size_t completeSize)
-
Use it to set the Content-Range filed of the header. The start and end values are numbered from 0.
The range field will be encoded with the given complete size in the format "start-end/completeSize".
- void SetContentType(const char * contentType)
-
Use it to set the content type. The type itself need to be set als string value (e. g. "text/html; charset=utf-8").
- void SetEncoding(http_encoding_t enc)
-
Set the encoding field to the given value. The webserver / IWebserverPlugin uses
that to define, if there is none encoding (HTTP_ENCODING_NONE) or if the data
had been compressed using gzip (HTTP_ENCODING_GZIP).
- void SetETag(const char * etag)
-
Set the etag field to the given value. The etag field will be used to support
browser side caching of data.
- void SetConnection(http_connection_t connection)
-
Set the connection type (HTTP_CONNECTION_NONE, HTTP_CONNECTION_KEEP_ALIVE,
HTTP_CONNECTION_UPGRADE).
- void SetUpgrade(http_upgrade_t upgrade)
-
If using connection type HTTP_CONNECTION_UPGRADE, this function will be used to
specify the type of upgrade (for now this class only supports HTTP_UPGRADE_WEBSOCKET).
- void SetWebsocketAcceptKey(const char * key)
-
Used to set the key for accepting incoming websocket connections.
- void SetCustomField(const char * field)
-
- void SetCustomField(const char * field, const char * value)
-
Use theese functions to set a custom field, that is not yet supported
directly by the HTTPHeader class. You can use the function to set the field directly.
In that case make sure that the field has the format ": "
(with only one space between the : and the value and no space after the field name!).
Or you can use the function which takes a field and a vlaue to let HTTPHeader
build up the field correctly, so that you don't need to make some string
concatonation by your self.
- void SetDate()
-
Set the date-time stamp header field.
- void SetRequest(http_request_method_t req, const char * resource)
-
Set the request type when building up a request header. resource will be the requested
resource.
Like SetHTTPResult(), this function also resets every other already set fields
(except the HTTP version).
- const char * GetHeaderData()
-
Returns the pointer to the header buffer.
- size_t GetHeaderSize()
-
Returns the size of the header.
HTTPParser
This class will be used to parse an byte stream for a HTTP header and extract the
fields / data from the header.
Note that the byte stream must begin with a valid HTTP header, or an error will be returned.
- size_t ParseData(char * data, size_t len)
-
Parsed the given data with the given length. You have to first call this function
and then call GetParseResult() to check the status of the parsing process.
The returned value is the number of bytes processed from the given data buffer.
This helps to figure out the start of the content sent with the header inside the
given buffer (if there is any).
- parseresult_t GetParseResult()
-
returns the result of the parsing process. The function will return one of the following values:
- HTTP_PARSE_DONE: Parsing had been finished succesfully. You can now call the other functions to get details of the received header.
- HTTP_PARSE_NEED_DATA: The header in the given byte stream was not complete. In that case, call ParseData() again (with new received data) to continue parsing.
- HTTP_PARSE_ERROR: An error occures during parsing. Noramly that means, that a correct header could not been found or that there was some error inside the header structure.
- http_encoding_t GetAcceptEncoding()
-
Returns the encoding the other side will accept. For now, HTTPlib and the
classes only support the GZIP encoding (HTTP_ENCODING_GZIP).
- http_request_method_t GetRequestMethod()
-
Return the request found inside the header. It could be one of the following values:
- HTTP_NONE
- HTTP_GET
- HTTP_HEAD
- HTTP_POST
- HTTP_PUT
- HTTP_CONNECT
- HTTP_OPTIONS
- HTTP_TRACE
- HTTP_PROPFIND
- HTTP_MKCOL
- HTTP_COPY
- HTTP_MOVE
- HTTP_DELETE
- const char * GetRequestTarget()
-
Returns the request target.
- char GetMajorVersion()
-
Returns the major version of the received header.
- char GetMinorVersion()
-
Returns the minor version of the received header.
- const HTTPHeaderField * GetHeaderField(const char * fieldName)
-
Returns the HTTPHeaderField object for the field given in fieldName.
If the field could not be found, NULL will be returned. Doing that,
you have access to the raw data of the fields of the header.
So if you need a field that is not directly supported by HTTPParser,
this is the function for you to go.
- size_t GetContentLength()
- Returns the length of the content sent with the header.
- bool IsConnectionType(http_connection_t ct)
-
Returns true, if the given conection type is set inside one the header fields.
Or false, if not. ct can be one of the following values:
- HTTP_CONNECTION_NONE: No special connection type had been given.
- HTTP_CONNECTION_KEEP_ALIVE: The browser requests to keep the connection alive, so that he can reuse it.
- HTTP_CONNECTION_UPGRADE: The browser requests a upgrade of the connection. Use GetUpgrade() tho get the type of the requested upgrade.
- bool IsChunkedTransfer()
-
Returns true if the header filed "Transfer-Encoding" contains chunked.
- const char * GetCookie()
-
Returns the value of the cookie header field.
- const char * GetETag()
-
Returns the value of the etag header field.
- const char * GetContentType()
-
Returns the content type declared by the header.
You have to parse the returning string by your self.
The HTTPlib doesn't have any kind of helper function for that.
- const char * GetHost()
-
Returns the host reported by the header.
- HTTPLib::http_upgrade_t GetUpgrade()
-
returns the upgrade type (if there is any). For now, the HTTPlib
only supports HTTP_UPGRADE_WEBSOCKET.
- HTTPRange * GetRange()
-
Returns an HTTPRange object to acces the values given by the range header field. If there is no
range header filed, NULL will be returned. The returned object is the start of a linked list of ranges.
Have a look to the HTTPRange description for more details.
- http_encoding_t GetEncoding()
-
Returns the value of the headers content-encoding field.
- const char * GetWebsocketKey()
-
Returns the websocket key set.
- int GetWebsocketVersion()
-
Returns the requested websocket version.
- const char * GetOrigin()
-
Returns the value of the origin field.
- const http_result_t * GetHTTPResultCode()
-
Returns the HTTP result code, if the header was a response header. Before calling GetHTTPResultCode(), make
sure that GetRequestMethod() returns HTTP_NONE and GetParseResult() is HTTP_PARSE_DONE. If an error occures
during parsing the header, HTTPParser will set the internal result code to a value that can be used so send
a correct answer to that error.
- size_t GetHeaderSize()
-
- char * MakeHeaderCopy()
-
Theese two functions are used to rebuild the header byte stream.
There are internally used by the webserver.
If you whant to use them, make sure that you release the buffer returned
from MakeHeaderCopy() after you no longer need it.
- void GetFieldListCopy(byte * & buffer, size_t & bufferSize) const
-
This function makes a copy of the header fileds. The function will malloc() a buffer and return the pointer
in the given varable buffer. The size of the buffer will be stored in bufferSize. That means, that the applicaiton
is responsible to call free() of the buffer when no longer used. This function will be used internally by
the Webserver and the IWebserverPlugin to pass the header fields for WebDAV requests.
HTTPHeaderField
Represents a HTTP header field and the value of it.
A field can have more than one values.
Note that values in one line seperated by ';' will be treated as one value.
You have to seperate them by yourself. Only if a field will apear multiple time,
there will be multiple values for that field.
- const char * GetValue(size_t idx)
-
Returns the value of the field for the given index. The function will return a pointer to the internal
buffer of the class. So make a copy of the value if you need to make changes, other ways the internal values
will be changed permanently.
- size_t GetValueCount()
-
Returns the number of values for that field.
HTTPRange
Represents the values of ranges send with an HTTP header. An instance of HTTPRange will be returned by
HTTPParser::GetRange(). The retunred instance is the start of a linked list. So never ever call delete of
an HTTPRange object. HTTPParser itself will take care of releasing the objects when needed. The class itself
has no functions. You have access directly to the fields of the class. The fields are numbered from 0.
- size_t start
-
The start of the range.
- size_t end
-
The end of the range
- enum rangeType
-
The type of the range. Depending on the type the values of start and end need to interpreted. rangeType
could be one of the following:
- RANGE_NONE: only used internally for initialization.
- RANGE_START_END: a range with start and end, with the values in the fields start and end.
- RANGE_START_ONLY: only the start had been given. So the application should return everything from of the from the byte given in start to the end of the file. The value of end is undefined and should be ignored.
- RANGE_LAST_BYTES: only the last bytes of a file should be retunred. The number of the bytes to return are set in start. The value of end is undefined and should be ignored.
struct http_result_t
This struct holds the HTTP result codes and their descriptions. This struct is used in the HTTP_* result code constants.
The following (self explaining) constants are defined:
- static const http_result_t HTTP_100; // Continue
- static const http_result_t HTTP_101; // Switching Protocols
- static const http_result_t HTTP_200; // OK
- static const http_result_t HTTP_201; // Created
- static const http_result_t HTTP_202; // Accepted
- static const http_result_t HTTP_203; // Non-Authoritative Information
- static const http_result_t HTTP_204; // No Content
- static const http_result_t HTTP_205; // Reset Content
- static const http_result_t HTTP_206; // Partial Content
- static const http_result_t HTTP_207; // Multi-Status
- static const http_result_t HTTP_300; // Multiple Choices
- static const http_result_t HTTP_301; // Moved Permanently
- static const http_result_t HTTP_302; // Found
- static const http_result_t HTTP_303; // See Other
- static const http_result_t HTTP_304; // Not Modified
- static const http_result_t HTTP_305; // Use Proxy
- static const http_result_t HTTP_307; // Temporary Redirect
- static const http_result_t HTTP_400; // Bad Request
- static const http_result_t HTTP_401; // Unauthorized
- static const http_result_t HTTP_402; // Payment Required
- static const http_result_t HTTP_403; // Forbidden
- static const http_result_t HTTP_404; // Not Found
- static const http_result_t HTTP_405; // Method Not Allowed
- static const http_result_t HTTP_406; // Not Acceptable
- static const http_result_t HTTP_407; // Proxy Authentication Required
- static const http_result_t HTTP_408; // Request Timeout
- static const http_result_t HTTP_409; // Conflict
- static const http_result_t HTTP_410; // Gone
- static const http_result_t HTTP_411; // Length Required
- static const http_result_t HTTP_412; // Precondition Failed
- static const http_result_t HTTP_413; // Payload Too Large
- static const http_result_t HTTP_414; // URI Too Long
- static const http_result_t HTTP_415; // Unsupported Media Type
- static const http_result_t HTTP_416; // Range Not Satisfiable
- static const http_result_t HTTP_417; // Expectation Failed
- static const http_result_t HTTP_423; // Locked
- static const http_result_t HTTP_426; // Upgrade Required
- static const http_result_t HTTP_500; // Internal Server Error
- static const http_result_t HTTP_501; // Not Implemented
- static const http_result_t HTTP_502; // Bad Gateway
- static const http_result_t HTTP_503; // Service Unavailable
- static const http_result_t HTTP_504; // Gateway Timeout
- static const http_result_t HTTP_505; // HTTP Version Not Supported
- static const http_result_t HTTP_507; // Insufficient Storage
- int code
-
The result code as number.
- const char * description
-
The description of the HTTP result code including the number (e. g. "200 OK").
- size_t descLen
-
The length of the description.