Cookie Less Monster: Fingerprinting code

step1
Enumerated the navigator and screen object, i.e., request the listing of all properties of the aforementioned objects.

step2
Enumerated the navigator object again, to ensure that the order of enumeration does not change.

step3
Created a custom object, populated it, and enumerated it. A custom, JavaScript-created object, allows us to compare the behavior of browser-populated objects (such as navigator) with the behavior of “classic”JavaScript objects.

step4
Attempted to delete a property of the navigator object, the screen object, and the custom object.

step5
Add the possibly-deleted properties back to their objects.

step6
Attempted to modify an existing property of the navigator and screen objects.

step7
If Object.defineProperty is implemented in the current browser, utilize it to make an existing property in the navigator, screen, and custom object non-enumerable.

step8
Attempt to delete the navigator and screen objects.

step9
Attempt to assign new custom objects to the navigator and screen variable names.