<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Battery Status Not Included: Assessing Privacy in Web Standards</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Lukasz Olejnik</string-name>
          <email>lukasz.w3c@gmail.com</email>
          <email>lukasz.w3c@gmail.com http://lukaszolejnik.com</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Steven Englehardt</string-name>
          <email>ste@cs.princeton.edu</email>
          <email>ste@cs.princeton.edu http://senglehardt.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Arvind Narayanan</string-name>
          <email>arvindn@cs.princeton.edu</email>
          <email>arvindn@cs.princeton.edu http://randomwalker.info</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Princeton University</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University College London</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2012</year>
      </pub-date>
      <abstract>
        <p>-The standardization process is core to the development of the open web. Until 2013, the process rarely included privacy review and had no formal privacy requirements. But today the importance of privacy engineering has become apparent to standards bodies such as the W3C as well as to browser vendors. Standards groups now have guidelines for privacy assessments, and are including privacy reviews in many new specifications. However, the standards community does not yet have much practical experience in assessing privacy. In this paper we systematically analyze the W3C Battery Status API to help inform future privacy assessments. We begin by reviewing its evolution - the initial specification, which only cursorily addressed privacy, the discovery of surprising privacy vulnerabilities as well as actual misuse in the wild, followed by the removal of the API from major browser engines, an unprecedented move. Next, we analyze web measurement data from late 2016 and confirm that the majority of scripts used the API for fingerprinting. Finally, we draw lessons from this affair and make recommendations for improving privacy engineering of web standards.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>The Battery Status API offers an interesting and unusual
case study of privacy assessment in the web standardization
process. The specification started with a typical progression:
it went through a few iterations as a draft, was quickly
implemented by multiple browser vendors, and then progressed to
a candidate recommendation — one which characterized the
privacy impact as “minimal”. Several years later, after it was
implemented in all major browser engines and was nearing
finalization, researchers discovered several privacy
vulnerabilities as well as misuse in the wild. In an unprecedented move,
two of the three major browser engines removed support for
the API and another browser moved to an opt-in model. In this
paper, authored by several of the researchers who discovered
the privacy problems, we reflect on these events, present new
empirical evidence of misuse, and extract recommendations
for privacy reviews in future standards.</p>
      <p>
        Before 2013, there were no formal review processes at
the major standards bodies to address privacy during the
design and standardization of web features. This is reflected
in the lack of privacy or security considerations in many past
specifications. However, the standards community has recently
made numerous substantial changes to address privacy during
the early stages of feature development. In 2013 the IETF
formally defined recommendations for privacy assessments
during the development of internet protocols [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The W3C
has also invested considerable resources into the creation of
specialized methodologies for such privacy assessments [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ],
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. This includes taking public stances on privacy expectations
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] and defining new groups and processes to evaluate privacy
[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Even the frameworks used during specification,
development, and publishing have been updated to encourage
all specification authors to include privacy and security review
sections [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>
        These recent advances in privacy review are timely, as new
and proposed web features will provide websites with much
deeper access to the user’s device and environment, especially
on smartphones and Internet-of-Things (IoT) devices.
Examples include Bluetooth connectivity [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], low-level device
sensors such as ambient light, acceleration, and vibration [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ],
[
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], and even the user’s interpupillary distance, in the context
of Virtual Reality [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>But why should standards consider privacy at all, rather
than leave it to browser vendors? Perhaps the market will
then allow each user to choose a browser that provides his
or her preferred trade-off between privacy and functionality.</p>
      <p>
        This argument is beguiling but simplistic — standards must fix
many design choices to ensure interoperability, and some of
these will inevitably impact privacy [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Indeed, there are many
examples of standards that impede efforts by browser vendors
to improve privacy without causing breakage [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Further,
standards allow setting a privacy floor across implementations.
      </p>
      <p>
        This helps avoid a race to the bottom, considering that privacy
might be a “market for lemons” [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] and is susceptible to
numerous behavioral biases [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>
        In this paper we study the privacy engineering aspects [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]
of the Battery Status API, with a focus on the standardization
and implementation process. Specifically,
1) We conduct a systematic case study of the Battery Status
      </p>
      <p>API (Section III).
2) We provide new measurements of Battery Status API</p>
      <p>use on the web (Section IV).
3) We extract useful privacy engineering practices and
provide recommendations to improve the design process
(Section V).</p>
      <p>
        We hope our work will be useful to standardization bodies,
browser vendors, privacy engineers, researchers, and web
developers. We seek to enrich Privacy Impact Assessment (PIA)
methodologies, with possible applications to other domains and Flash storage to respawn cleared identifiers [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ],
including IoT and mobile APIs. [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], using “enriched” headers that contain tracking IDs
injected by ISPs [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], and by identifying a device solely by its
      </p>
      <p>
        II. BACKGROUND AND RELATED WORK properties, i.e. device fingerprinting [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ], [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ], [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ], [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]. The
The W3C standardization process. The W3C employs W3C’s TAG has identified these advanced tracking behaviours
a maturity level model in the standardization process [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. as “actively harmful to the Web, because [they are] not under
Specifications start as a community group Working Draft and the control of users and not transparent” [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
may undergo several revisions while the scope and content is In this case study, we examine how the Battery Status API
refined. Once the specification is ready for a final review by can be used to fingerprint devices (Section III-C). Device
a wide audience, it will progress to a Candidate Recommen- fingerprinting is the process of identifying a device by its set
dation. The W3C formally calls for implementations at this of features, rather than by setting a persistent identifier on the
stage, although in practice they may already exist. Feedback device. The effectiveness of tracking increases as a device’s
from the Candidate Recommendation and experience gathered feature set is more unique. Past studies have demonstrated
from implementations is used to refine the specification further. that a majority of both desktop and mobile users have a
If the specification requires no substantive changes it will unique fingerprint [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ], [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ]. In response to fingerprinting
progress to a Proposed Recommendation. After a final set concerns, the W3C’s PING released a Working Group Note to
of endorsements a specification will progress to a full W3C provide guidance to specification authors on how to address
Recommendation. and mitigate fingerprinting in their specifications [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ].
      </p>
      <p>
        The lengthy standardization process is consensus-driven. When data is identified as potentially sensitive, such as that
The stakeholders of a standard are generally organized into which relates to the user’s device, behavior, location, or
enWorking Groups, typically comprised of employees of browser vironment, various W3C specifications have applied different
vendors and other technology companies. To reach consen- restrictions on access to that data. Some specifications have
sus, all members must agree on a decision. Other Working made the data available only in the top level browsing context
Groups, such as those specializing in privacy, accessibility, (i.e. where access from third-party scripts is limited) [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ],
or web architecture may give their input on aspects of the and others provide data only in a secure context (i.e. among
specification relevant to their mission. Additionally, the speci- other restrictions, requiring TLS) [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ]. This type of data access
fication Working Group must provide evidence of wide review, also frequently requires user permission before any potentially
which includes reviews by a number of external parties: the sensitive information is made available. The Web Permissions
public (i.e. researchers) and NGOs (some of whom are W3C API is a draft specification of a mechanism that allows users
members). to manage these types of permissions in a user-friendly way
      </p>
      <p>
        Privacy reviews often happen during the draft stage, al- [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ].
though the depth of reviews can vary. As of 2017, the official Past privacy assessment research. Several studies have
W3C Process Document [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] does not require a privacy examined how privacy assessments are conducted as part of
review. In practice, reviews are often performed prior to a the specification process. Nick Doty identifies and addressees
draft entering the Candidate Recommendation level. A privacy the challenges of privacy reviews in standardization bodies
consideration section can be normative, in which the state- [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Doty describes the history of security and privacy
conments included are requirements that an implementation must sideration sections in Request for Comments (RFC), IETF
follow to be compliant with the specification. Alternatively, specifications, and W3C specifications. RFC 6973 describes
the section can be non-normative, which is used to provide how design choices in internet protocols may impact privacy,
extra information, context, or recommendations that an imple- and provides guidelines for drafting of Privacy Considerations
mentation is not required to adhere to. sections in RFC documents [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Similarly, Frank Dawson
      </p>
      <p>
        The W3C’s Technical Architecture Group (TAG), which describes a methodology for drafting the privacy
consideraaims to build consensus on principles of web architecture, tions sections of W3C standards [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Dawson highlights the
authored the Security and Privacy Self-Review Questionnaire importance of privacy assessments during each stage of a draft
[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. The questionnaire exists to help authors, TAG, and others specification and the need for an open process to incorporate
assess the privacy and security impacts of a specification. the findings of external research.
      </p>
      <p>
        It recommends that authors review their specifications under
several different threat models and asks a series of questions III. CASE STUDY: BATTERY STATUS API
related to data access and quality. The W3C also has the A. API specification
Privacy Interest Group (PING), which provides guidance and The Battery Status API is a browser mechanism that
proadvice for addressing privacy in standards [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. vides access to the power management information of a device
      </p>
      <p>
        W3C privacy assessment practices and requirements. [
        <xref ref-type="bibr" rid="ref34">34</xref>
        ]. An example use case listed in the W3C specification
Privacy reviews in specifications often focus on how the pro- is responding to low battery levels. For instance, an online
posed design impacts web tracking. Past studies have shown word processor might auto-save more frequently when the
that trackers frequently use many browser technologies to track battery is low. The API provides the following information:
users: by using stateful mechanisms like cookies, localStorage, the battery charge level (e.g. 0:43 when the battery has 43%
Firefox adds
support
      </p>
      <p>Firefox 38 rounding
bug fixed</p>
      <p>Chrome rounding Blink bug moved to
patch commit permissions component</p>
      <p>W3C Battery
Status Event WD</p>
      <p>WebKit adds
support</p>
      <p>Firefox rounding
bug reported</p>
      <p>W3C Yandex announces
Prop.Rec. opt-in model
2011
2012
2013
2014
2015</p>
      <p>2017
Chrome adds
support</p>
      <p>2016
API misuse
in the wild</p>
      <p>Firefox 52 limits
API to internal use</p>
      <p>W3C Battery
Status API WD</p>
      <p>W3C Candidate
Recommendation</p>
      <p>Leaking Battery
report published</p>
      <p>Uber
study</p>
      <p>Firefox and WebKit
remove support
remaining power), the charging status (whether or not the
device is charging), the time in seconds to a full discharge
(dischargingTime; when discharging) or a full charge
(chargingTime; when charging).</p>
      <p>
        In April 2011, the Battery Status Event Working Draft
first described how a website can access battery information
[
        <xref ref-type="bibr" rid="ref35">35</xref>
        ]. The specification was reworked into the Battery Status
API in November 2011 [
        <xref ref-type="bibr" rid="ref36">36</xref>
        ] and progressed to a Candidate
Recommendation in May 2012 [
        <xref ref-type="bibr" rid="ref37">37</xref>
        ]. This version identified a
“minimal impact on privacy or fingerprinting”, but suggested
“the user agent can obfuscate the exposed value in a way
that [websites] cannot directly know if a hosting device has
no battery, is charging or is exposing fake values.” [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ]. This
shows that although the specification authors felt the privacy
impact was minimal, they felt there was enough of a risk that
user agents (browsers) may want to hide a user’s true battery
status.
      </p>
      <sec id="sec-1-1">
        <title>B. Adoption by browser vendors</title>
        <p>
          The first implementations of the Battery Status API were
in 2012 by Firefox [
          <xref ref-type="bibr" rid="ref39">39</xref>
          ] (mobile and desktop) and WebKit
[
          <xref ref-type="bibr" rid="ref40">40</xref>
          ]. Chrome1 also started an implementation in 2012 that
was never completed, citing a general lack of interest and
convincing use cases [
          <xref ref-type="bibr" rid="ref41">41</xref>
          ]. Chrome later removed and
reimplemented it in 2014 on both mobile and desktop [
          <xref ref-type="bibr" rid="ref41">41</xref>
          ].
Other browsers based on Chrome’s Blink engine supported
the API soon after, such as Opera in 2014 [
          <xref ref-type="bibr" rid="ref42">42</xref>
          ]. This level
of implementation fulfills W3C requirements of having at at
least two independent implementations prior to finalization of
a specification [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]. For a summary of support by additional
browsers, see Table I.
        </p>
      </sec>
      <sec id="sec-1-2">
        <title>C. Discovery of privacy vulnerabilities</title>
        <p>
          In 2015 Olejnik et al. [
          <xref ref-type="bibr" rid="ref43">43</xref>
          ] examined the W3C specification
and the browser implementations of the API and found several
privacy vulnerabilities. They showed that the API can be used
to track users, both by using the status readouts as short-term
identifiers and by using repeated readouts to reconstruct the
battery capacity on certain platforms.
        </p>
        <p>1Chromium and Chrome are both based on the Blink rendering engine and
expose the same Battery Status API. We refer exclusively to Chrome for the
remainder of the paper but our analysis is applicable to both browsers.</p>
        <p>Battery status readouts made users of certain platforms
vulnerable to tracking across sites by a third-party. The
API’s charge level returns a value between 0 and 1 which
represents the ratio of the current charge remaining to the
maximum capacity. The researchers found that Firefox on
Linux returned a double-precision floating-point value for
charge level, the result of returning the operating system’s
value directly without truncating the result. This means that
there is a large number of possible values for the charge
level. Thus, if a tracker were to see the same charge level
readout on two different sites at the same instant (or within
a short time window), it gives the tracker evidence that the
page visits were from the same device. This is true even if the
user cleared cookies between the two visits or used different
browser contexts for the two visits, such as regular versus
private browsing.</p>
        <p>The researchers further pointed out that short-term tracking
was possible even on platforms which didn’t expose the
highprecision charge level, although it was less effective. On
platforms other than Firefox on Linux, the battery charge level
was just two significant digits. However, by combining the
charge level with dischargeTime and chargeTime the
researchers estimated the possible number of states to be on
the order of millions under normal operating conditions. Thus,
a tracker could still conclude that two page visits with the
same status readout is likely the same device, particularly if
it coupled that measurement with the device’s IP address.</p>
        <p>Finally, the researchers showed that the double-precision
readouts for Firefox on Linux enabled a more sophisticated
attack in which a site could recover the battery capacity.
The attack works by reading the device’s current charge level
and calculating which possible battery capacities could result
in that charge level based on how the underlying operating
system battery library calculates charge level. As the tracker
makes more readings, it decreases the number of possible
battery capacity values that could result in the observed
sequence of charge levels. In the end, a tracker could recover
the actual battery capacity, and use that as a static identifier
for the device. This capacity could also be included alongside
other device properties in a broader device fingerprint.</p>
      </sec>
      <sec id="sec-1-3">
        <title>D. Initial privacy improvements by browser vendors</title>
        <p>
          In response to the 2015 report [
          <xref ref-type="bibr" rid="ref43">43</xref>
          ], Firefox fixed the
precision of the battery level readout to two significant digits
for all platforms [
          <xref ref-type="bibr" rid="ref44">44</xref>
          ]. Chrome did not return high precision
readouts on Linux because of an implementation difference.
However, had Chrome used a high precision source it would
have exhibited the same behavior. To prevent this, Chrome
preemptively capped the precision to no more than 2 digits
on all platforms [
          <xref ref-type="bibr" rid="ref45">45</xref>
          ]. The W3C specification was amended
[
          <xref ref-type="bibr" rid="ref46">46</xref>
          ] with non-normative privacy recommendations. Notable
additions are:
1) data minimization — avoiding the exposition of high
precision readings of battery status information
2) user control — optionally making the API subject to
browser permissions that may require prompting the user
prior to the use of the API
3) incognito support — disabling the API in private
browsing modes
4) transparency — informing the user when the API is and
has been in use
        </p>
        <p>This response prevents the battery capacity from being
recoverable and lessens the usefulness of status readouts as
a short-term identifiers. However, even with reduced precision
the battery status output will still provide additional identifying
information that can be used to fingerprint and re-identify a
device over short time intervals.</p>
      </sec>
      <sec id="sec-1-4">
        <title>E. Discovery of misuse on the web</title>
        <p>
          Englehardt and Narayanan measured the prevalence of
tracking and fingerprinting techniques on the Alexa top 1
million websites in January 2016 [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ]. During manual
examination of automatically identified fingerprinting scripts, they
found two scripts, together present on 22 sites, that used
battery status as part of a device fingerprint. This finding
confirmed that battery status was being used to fingerprint
devices in the wild. In Section IV we present an automated
analysis of the Alexa top 50,000 to audit the use of the API
in late 2016.
        </p>
        <p>One script, served by lynxbroker.de, retrieves only the
current charge level of the device. The other script, served by
adscore.com, queries all properties of the BatteryManager
interface, including the current charging status, the charge
level, and the time remaining to discharge or recharge. Both
scripts combine the retrieved battery information with other
identifying properties of the device, such as the canvas
fingerprint2 or system fonts, to create a device fingerprint.</p>
      </sec>
      <sec id="sec-1-5">
        <title>F. Discovery of second-order privacy concerns</title>
        <p>
          Until May 2016, the primary privacy concern of the API was
its usefulness for online tracking. In May 2016, Uber disclosed
its finding that users with a low battery are more willing to pay
higher prices for a ride (i.e. more likely to book a ride during
surge pricing) [
          <xref ref-type="bibr" rid="ref47">47</xref>
          ]. This sparked concerns that Uber or other
companies could misuse battery status information to increase
        </p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>2For a description of canvas fingerprinting see [26]</title>
      <p>
        prices for users with a low battery level [
        <xref ref-type="bibr" rid="ref48">48</xref>
        ], [
        <xref ref-type="bibr" rid="ref49">49</xref>
        ]. Mozilla
cited these second order privacy concerns on W3C mailing
lists during their initial discussions of whether to remove or
restrict the API [
        <xref ref-type="bibr" rid="ref50">50</xref>
        ]. Materials obtained in a Subject Access
Request confirm that Uber indeed collects the device battery
level for use in fraud detection [
        <xref ref-type="bibr" rid="ref51">51</xref>
        ].
      </p>
      <sec id="sec-2-1">
        <title>G. Removal of the API from browsers</title>
        <p>As summarized in Table I, support for the Battery Status
API has tumbled in response to privacy concerns. At its peak
in 2016, the API was implemented in the engines supporting
Firefox, Chrome, and Safari (though it was disabled in Safari).
In addition, other browsers built on the major engines, such
as Opera and the Yandex Browser, also exposed the API to
the web.</p>
        <p>
          In October 2016 Mozilla announced it would remove access
to API by web content in Firefox 52 [
          <xref ref-type="bibr" rid="ref59">59</xref>
          ]. The API is now
restricted to internal browser code, and may eventually be
exposed to WebExtensions-based browser extensions [
          <xref ref-type="bibr" rid="ref52">52</xref>
          ]. In
March 2017 Firefox 52 was released with the API removed
[
          <xref ref-type="bibr" rid="ref53">53</xref>
          ]. Following Mozilla’s decision, WebKit, the underlying
engine behind Safari browser, removed the Battery Status API
from its source tree [
          <xref ref-type="bibr" rid="ref54">54</xref>
          ].
        </p>
        <p>
          As of March 2017, Chrome developers have not provided an
official stance on whether or how they will change the API.
It is possible they are considering placing it behind a user
permission, as evidenced by the choice of bug component3
for the relevant bug [
          <xref ref-type="bibr" rid="ref55">55</xref>
          ]. Microsoft Edge continues to have
the API on its feature wishlist [
          <xref ref-type="bibr" rid="ref56">56</xref>
          ]; as of March 2017 there
is no indication of a change.
        </p>
        <p>
          Other browsers based on these engines could also restrict
access to the API if desired. One such example is the Yandex
Browser (built on the Blink engine), which now spoofs a
fully charged status until the user explicitly enables the API
using the appropriate browser setting [
          <xref ref-type="bibr" rid="ref58">58</xref>
          ]. Yandex has limited
market share, but we include it in the table to show the
versatility of responses by browser vendors.
        </p>
        <p>Browser vendors regularly make privacy-related changes
and continually deprecate unused and insecure features.
However, the removal of an entire API in response to privacy
concerns is unprecedented. We verified that this type of feature
removal has not happened before by checking a website which
tracks browser changes for compatibility purposes4.</p>
      </sec>
      <sec id="sec-2-2">
        <title>H. The future of the API</title>
        <p>
          As of March 2017, it is unclear how the specification and
remaining implementations will progress. Since the API was
implemented in both Chrome and Firefox in 2016, it fulfilled
the W3C requirement of two interoperable implementations
[
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]. Thus, despite only having one current implementation
in 2017 (i.e. Chrome), the specification could progress to a
W3C Recommendation. If there isn’t sufficient interest by
the authors to continue the specification, it can be published
as a W3C Note, which would signify the end of active
3Blink &gt; Permissions API
4www.fxsitecompat.com
development by the W3C. The specification authors have
suggested restricting access to the API to secure, top-level
browsing contexts as an additional step to the privacy risks
associated with the API [
          <xref ref-type="bibr" rid="ref60">60</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>IV. USE AND MISUSE OF THE API IN THE WILD</title>
      <sec id="sec-3-1">
        <title>A. Statistics on usage in the wild</title>
        <p>
          We measured the use of the Battery Status API on the
homepages of the Alexa top 50,000 sites in November 20165
using OpenWPM [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ]. We found that in total, the API was
used by 56 distinct parties on 841 sites. The majority of this
usage was by third parties — 33 third parties on a total of 815
sites.
        </p>
        <p>
          We manually classified these 33 scripts, all distinct, to
determine how the feature was being used around the time
of its removal. We build on the fingerprinting classification
methodology outlined in [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ]. We classify a script as benign if
it uses the battery status to do things we feel the API designers
intended to support, such as performance and diagnostic
measurements. We classify a script as tracking if it uses the API
for device identification, whether for fingerprinting, analytics,
or fraud detection.
        </p>
        <p>We found 16 third parties using the API for tracking, 11 of
which use it as part of a device fingerprint. An additional
8 third parties use the API for benign purposes. For the
remaining 9 third parties, we were unable to classify the usage,
either due to script obfuscation or vagueness. Scripts from the
16 trackers are present on 347 sites (or around 48% of sites
on which we classified API use). The benign uses of the API
were primarily from two third parties: YouTube, where the
API was used in performance metrics for embedded videos,
and Boomerang6, a performance measurement library.</p>
      </sec>
      <sec id="sec-3-2">
        <title>B. A representative example of misuse</title>
        <p>A representative third-party script using the Battery Status
API for tracking is a beacon script7 served by riskified.com, a
supplier of fraud prevention solutions for e-commerce systems.
Riskified’s marketing material maintains that the company
takes advantage of user behavioral monitoring models.</p>
        <p>Riskified scripts collect a number of behavioral properties
of a user’s device. From the Battery Status API, they collect
5Since Mozilla and WebKit announced their intent to remove the API in
October 2016, it is possible some sites or scripts could have changed their use
of it in response to that news. We believe a 1 month time window is small
enough that this is unlikely to have a significant effect on our results.
6https://soasta.github.io/boomerang/doc/
7Supplied from the URL of the form http[s]://beacon.riskified.com/?shop=...
the charging state, the charge level, and time to discharge (or
charge). In addition to battery information the scripts collect
the number of CPU cores, the JS console heap size, the in-use
console heap size, and the total console heap size.</p>
        <p>
          We found Riskified scripts utilitizing the Battery Status
API on 27 of the top 50,000 sites measured. Among the
notable sites embedding Riskified were burberry.com (a
popular clothing fashion brand). Additionally, we queried the
Princeton Web Census data for November 2016 [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ] and
found that 205 of the top 1 million sites request the same
Riskified script. Riskified receives the data with requests to
https:// c.riskified.com/ client infos.json.
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>C. A retrospective look at vendor response</title>
        <p>Nearly half of the Battery Status API use we classified
was for user profiling or identification — a use case the API
designers did not intend to support. When measured in terms
of distinct scripts rather than distinct sites, that fraction rises to
two-thirds. Note that our measurement is conservative; parties
which collect battery status information through performance
or feature detection libraries can also use that information to
track users, but we do not make this assumption.</p>
        <p>
          At the time of Firefox’s and WebKit’s decisions to remove
the API, the preliminary evidence suggested that it was being
misused in the majority of cases [
          <xref ref-type="bibr" rid="ref61">61</xref>
          ]. Mozilla’s discussion
thread cites two specific uses: the research described in
Section III and the Boomerang performance library [
          <xref ref-type="bibr" rid="ref61">61</xref>
          ]. The
empirical data presented here suggest that use is indeed split
between gathering performance metrics and tracking users. We
found no additional categories of use, and confirm that the
examples presented in the discussion thread reflect the broader
usage on the web.
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>V. LESSONS LEARNED &amp; RECOMMENDATIONS</title>
      <p>Based on insights from our case study, we extract a set of
good privacy engineering practices and make several concrete
recommendations on how standards bodies can improve the
standardization process. We draw from our research, our
participation in standardization efforts, our assessments of
specifications in the draft phase, as well as a review and tests
of experimental web browser features.</p>
      <sec id="sec-4-1">
        <title>A. Information exchange between vendors and researchers is essential</title>
        <p>
          Research can reveal theoretical privacy risks and their
exploitation in the wild; it can also provide data on the usage
of features on the web. Standards-based platforms such as
the web are more conducive to research, and therefore attract often early adopters of a new API [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ], [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ]. The benefits
more of it, compared to proprietary platforms. Further, when of doing an early audit are two-fold: misuses of the API
implementations are open-source, knowledge propagates not that weren’t found during the privacy assessment may be
just from researchers to vendors but also among vendors. discovered, and any uncovered vulnerability can be fixed at
        </p>
        <p>
          Our case study illustrates these themes and their beneficial the specification level before web compatibility and breakage
effects on privacy. After Firefox was reported to return high- become a concern.
precision values on Linux (Section III-C), both Firefox and In the past, fingerprinting abuse in the wild has been
Chrome fixed the bug. Note that although Chrome did not primarily measured by the academic research community [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ],
exhibit the vulnerability, it chose to preemptively restrict [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ], [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ], [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ]. As research on fingerprinting starts to lose its
the precision of the readout to prevent the possibility. This novelty, academic researchers may lose the incentive for
freillustrates knowledge propagation between vendors, sparked quent measurements of fingerprinting abuse. As a replacement,
by research results. Similarly, the specification was updated we suggest measurement through built-in browser probes or a
to include a recommendation to avoid high-precision readouts dedicated web crawling infrastructure run by browser vendors
(Section III-D). or privacy advocacy groups.
        </p>
        <p>Still, the specification process can benefit from a deeper
connection to research. Deliberate attempts to break the pri- D. Specification authors should carry out privacy assessments
vacy assumptions of specifications should be actively incen- with multiple threat models
tivized — perhaps by funding attack research, or by organizing
a forum for academics and researchers to publish their privacy
reviews.</p>
      </sec>
      <sec id="sec-4-2">
        <title>B. The specification process should include a privacy review of implementations</title>
        <p>On the modern web, proposed features often get deployed
rapidly. At the time a specification is drafted, initial
implementations are typically available in the development versions
of browsers. By the time the spec is finalized, several vendors
may already fully support a feature; in fact, the W3C requires
at least two implementations to exist before official
recommendation. We recommend that specification authors study
implementations to prepare higher quality privacy assessments.
Implementations enable field testing of theoretical attacks and
can be examined for potential API misuses.</p>
        <p>With the Battery Status API, the privacy risk stemmed
from a difficult-to-predict interconnection of software layers,
namely the browser acquiring information from the operating
system in order to supply it to a web script. Such a risk is
difficult to predict during the design phase, but becomes much
easier to identify with access to an implementation.</p>
        <p>
          In contrast to the Battery Status API, consider the Ambient
Light Events API, which provides access to the light level of
the device’s surroundings. The specification was examined at
the API design level, the implementation was tested, and the
source code was reviewed8 — all as part of the review process.
Issues identified at the implementation level led both Chrome
and Firefox to address a rounding issue related to the light
level data [
          <xref ref-type="bibr" rid="ref62">62</xref>
          ], [
          <xref ref-type="bibr" rid="ref63">63</xref>
          ].
        </p>
      </sec>
      <sec id="sec-4-3">
        <title>C. API use in the wild should be audited after implementation</title>
        <p>
          In removing the Battery Status API from Firefox, Mozilla
was influenced by the paucity of legitimate uses of the API in
the wild [
          <xref ref-type="bibr" rid="ref61">61</xref>
          ]. This underscores the importance of analyzing
the early use of an API after deployment. Measurement
studies have continually shown that fingerprinting scripts are
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>8Lukasz Olejnik participated in this effort as a W3C Invited Expert.</title>
      <p>
        Our case study shows how a seemingly innocuous
mechanism can introduce privacy risks. The original 2012
specification of Battery Status API characterized the fingerprinting risk
as “minimal”, but did not include any analysis of that risk [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ].
An enumeration of the possible fingerprinting approaches,
even if minimal in expected effectiveness, may have helped
avoid the blind spot. We recommend that if any privacy
vulnerability is identified, possible exploitation should be modeled
and analyzed in detail. Privacy assessment methodologies must
evolve to keep abreast of the growing technical complexity of
web APIs.
      </p>
      <p>
        The case study shows the importance of assessing the data
quality requirements of APIs, as unnecessarily precise data
may expose users to unforeseen privacy risks. It also shows the
importance of data minimization as a precaution against
unexpected future misuses. Indeed, the Battery Status vulnerability
served as a motivating example of these strategies in a W3C
draft recommendation on browser fingerprint minimization
[
        <xref ref-type="bibr" rid="ref30">30</xref>
        ].
      </p>
      <p>
        Specification authors must also enumerate and analyze
all relevant threat models. Some implementers such as the
Tor browser operate under much stricter threat models. For
example, most implementers may find it acceptable to reveal
the user’s operating system through a new API. But not the
Tor Browser, as it attempts to maintain a uniform fingerprint
across all devices [
        <xref ref-type="bibr" rid="ref64">64</xref>
        ].
      </p>
      <sec id="sec-5-1">
        <title>E. Avoiding over-specification supports innovative privacy solutions</title>
        <p>W3C specifications are expected to be well defined, but do
allow implementers significant leeway. We recommend that
standards exploit this flexibility to set a privacy floor yet leave
room for innovative privacy solutions by implementers.
Overspecification may have the unintended effect of rendering some
privacy solutions uninteroperable with the standard or with
other web features.</p>
        <p>
          Indeed, implementers have employed novel strategies to
mitigate the privacy risks of the Battery Status API
(Section III-G). Yandex, which reports that the battery is fully
charged, effectively disables the API by default. A user may
choose to offer websites battery information in an explicit
opt-in manner [
          <xref ref-type="bibr" rid="ref57">57</xref>
          ]. This opt-in mechanism is also used for
the Vibration API [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], possibly addressing potential misuses
[
          <xref ref-type="bibr" rid="ref65">65</xref>
          ], and giving users a consistent privacy control experience
across APIs. In contrast, Firefox removed access to the entire
API from web content, but allowed the API to be accessible
internally and to addon-sdk extensions. This allows the API to
still be used by privileged code while preventing abuse from
untrusted code.
        </p>
      </sec>
      <sec id="sec-5-2">
        <title>F. Specifications should provide guidance for web developers, not just browser vendors</title>
        <p>Specifications should not only identify points of privacy
concern for browser vendors and other implementers, but
should also provide useful guidance for web application
developers when possible. Web developers are ultimately
the end consumers of new features and are responsible for
complying with local data protection regulations. To assist
these developers, specifications should highlight if a particular
feature provides sensitive data. Including this information in
a specification will also assist browser vendors in properly
documenting the APIs.</p>
        <p>
          The Battery Status API specification currently contains
guidance describing the possible risks and suggesting
mitigation strategies (Section III-D). It is one of the sensor APIs
maintained by W3C’s Device and Sensors Working Group
[
          <xref ref-type="bibr" rid="ref66">66</xref>
          ]. Other sensor APIs have richer data sources and may pose
more complex privacy threats, making it crucial to provide
guidance for developers. For example, draft specifications
of the Generic Sensors API [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] and the Web Bluetooth
API [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] recommend that web developers perform a privacy
impact assessment prior to deploying applications which make
use of these APIs. We commend these authors for attending
to privacy, but call for such specifications to include more
detailed recommendations.
        </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>VI. CONCLUSION</title>
      <p>The removal of an entire browser feature by multiple
vendors in response to privacy concerns is an unprecedented
decision. It underscores the importance of engineering for
privacy throughout the specification, implementation, and web
development stages.</p>
      <p>Our work highlights how privacy research can influence
standards and implementations. We hope that our case study
and recommendations will prove useful to standards bodies,
browser vendors, and web developers. We also hope that
privacy impact assessment and other sound privacy engineering
practices will make inroads into nascent domains such as the</p>
    </sec>
    <sec id="sec-7">
      <title>Internet of Things.</title>
    </sec>
    <sec id="sec-8">
      <title>ACKNOWLEDGMENTS</title>
      <p>We would like to thank Hadley Beeman (W3C TAG),
Marcos Caceres (Mozilla) and Anssi Konstiainen (Intel) for help
and useful feedback. Englehardt and Narayanan are supported
by NSF award CNS 1526353. Measurements were funded with
an AWS Cloud Credits for Research grant.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>A.</given-names>
            <surname>Cooper</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Tschofenig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Aboba</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Peterson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Morris</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hansen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Smith</surname>
          </string-name>
          , “
          <article-title>Rfc 6973 - privacy considerations for internet protocols</article-title>
          ,
          <source>” IETF, Tech. Rep.</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>N.</given-names>
            <surname>Doty</surname>
          </string-name>
          , “
          <article-title>Reviewing for privacy in internet and web standard-setting,” in Security and Privacy Workshops (SPW</article-title>
          ),
          <year>2015</year>
          IEEE. IEEE,
          <year>2015</year>
          , pp.
          <fpage>185</fpage>
          -
          <lpage>192</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>F.</given-names>
            <surname>Dawson</surname>
          </string-name>
          , “
          <article-title>Specification Privacy Assessment (SPA</article-title>
          ) ,” https://yrlesru. github.io/SPA/,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>M.</given-names>
            <surname>Nottingham</surname>
          </string-name>
          , “Unsanctioned Web Tracking,” https://www.w3.org/ 2001/tag/doc/unsanctioned-tracking/,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5] “Privacy Interest Group Charter,” https://www.w3.org/
          <year>2011</year>
          /07/privacyig-charter,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6] “Tracking Protection Working Group Charter,” https://www.w3.org/ 2011/tracking-protection/charter.html,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>West</surname>
          </string-name>
          , “
          <string-name>
            <surname>Self-Review</surname>
            <given-names>Questionnaire</given-names>
          </string-name>
          : Security and Privacy,” https:// w3ctag.github.io/security-questionnaire/,
          <year>2015</year>
          , accessed:
          <volume>25</volume>
          .
          <fpage>10</fpage>
          .15.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8] --, “
          <article-title>Bikeshed should require security and privacy considerations sections</article-title>
          ,” https://github.com/tabatkins/bikeshed/issues/513,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>N.</given-names>
            <surname>Doty</surname>
          </string-name>
          , “
          <article-title>Nudging/warnings/prompts for Privacy and Security Considerations sections</article-title>
          ,” https://github.com/w3c/respec/issues/539,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10] Web Bluetooth Community Group, “
          <string-name>
            <surname>Web Bluetooth</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https:// webbluetoothcg.github.io/web-bluetooth/,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>T.</given-names>
            <surname>Langel</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Waldron</surname>
          </string-name>
          , “
          <string-name>
            <surname>Generic Sensors</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://www.w3.org/ TR/generic-sensor/,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kostiainen</surname>
          </string-name>
          , “
          <string-name>
            <surname>Vibration</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://www.w3.org/TR/vibration/,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <fpage>W3C</fpage>
          , “WebVR,” https://w3c.github.io/webvr/spec/1.1/,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhu</surname>
          </string-name>
          , “
          <article-title>Clarify section 3.14 and add Third Party Tracking as an opt-in threat model</article-title>
          ,” https://github.com/w3ctag/security-questionnaire/ issues/7,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>T.</given-names>
            <surname>Vila</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Greenstadt</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Molnar</surname>
          </string-name>
          , “
          <article-title>Why we can't be bothered to read privacy policies models of privacy economics as a lemons market</article-title>
          ,”
          <source>in Proceedings of the 5th international conference on Electronic commerce. ACM</source>
          ,
          <year>2003</year>
          , pp.
          <fpage>403</fpage>
          -
          <lpage>407</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>A.</given-names>
            <surname>Acquisti</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Grossklags</surname>
          </string-name>
          , “
          <article-title>What can behavioral economics teach us about privacy,” Digital Privacy: Theory, Technologies and Practices</article-title>
          , vol.
          <volume>18</volume>
          , pp.
          <fpage>363</fpage>
          -
          <lpage>377</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gu</surname>
          </string-name>
          <article-title>¨rses and</article-title>
          <string-name>
            <surname>J. M. del Alamo</surname>
          </string-name>
          , “
          <article-title>Privacy engineering: Shaping an emerging field of research and practice</article-title>
          ,
          <source>” IEEE Security &amp; Privacy</source>
          , vol.
          <volume>14</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>40</fpage>
          -
          <lpage>46</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          <source>[18] “W3C Technical Report Development Process</source>
          ,” https://www.w3.org/ 2017/Process-20170301/#Reports, accessed
          <volume>10</volume>
          .
          <year>02</year>
          .16.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>H. C. Altaweel</surname>
            <given-names>I</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Good</surname>
            <given-names>N</given-names>
          </string-name>
          , “
          <article-title>Web privacy census</article-title>
          ,
          <source>” Technology Science</source>
          ,
          <year>2015</year>
          . [Online]. Available: http://techscience.org/a/2015121502
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>A.</given-names>
            <surname>Soltani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Canty</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Q.</given-names>
            <surname>Mayo</surname>
          </string-name>
          , L. Thomas, and
          <string-name>
            <given-names>C. J.</given-names>
            <surname>Hoofnagle</surname>
          </string-name>
          , “
          <article-title>Flash cookies and privacy</article-title>
          .”
          <source>in AAAI Spring Symposium: Intelligent Information Privacy Management</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>M.</given-names>
            <surname>Ayenson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. J.</given-names>
            <surname>Wambach</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Soltani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Good</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C. J.</given-names>
            <surname>Hoofnagle</surname>
          </string-name>
          , “
          <article-title>Flash cookies and privacy II: Now with HTML5 and ETag respawning</article-title>
          ,”
          <source>World Wide Web Internet And Web Information Systems</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>A. M. McDonald</surname>
            and
            <given-names>L. F.</given-names>
          </string-name>
          <string-name>
            <surname>Cranor</surname>
          </string-name>
          , “
          <article-title>Survey of the use of Adobe Flash Local Shared Objects to respawn HTTP cookies, a,” ISJLP</article-title>
          , vol.
          <volume>7</volume>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>J.</given-names>
            <surname>Mayer</surname>
          </string-name>
          , “The Turn-Verizon Zombie Cookie,” http://webpolicy.org/
          <year>2015</year>
          /01/14/turn-verizon
          <string-name>
            <surname>-</surname>
          </string-name>
          zombie-cookie/,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>N.</given-names>
            <surname>Nikiforakis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kapravelos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Joosen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Kruegel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Piessens</surname>
          </string-name>
          , and G. Vigna, “
          <article-title>Cookieless monster: Exploring the ecosystem of web-based device fingerprinting,” in Security and Privacy (S&amp;P)</article-title>
          . IEEE,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>G.</given-names>
            <surname>Acar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Juarez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Nikiforakis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Diaz</surname>
          </string-name>
          , S. Gu¨rses,
          <string-name>
            <given-names>F.</given-names>
            <surname>Piessens</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Preneel</surname>
          </string-name>
          , “
          <article-title>FPDetective: dusting the web for fingerprinters,”</article-title>
          <source>in Proceedings of CCS. ACM</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>G.</given-names>
            <surname>Acar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Eubank</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Englehardt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Juarez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Narayanan</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Diaz</surname>
          </string-name>
          , “
          <article-title>The web never forgets: Persistent tracking mechanisms in the wild</article-title>
          ,”
          <source>in Proceedings of CCS</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>S.</given-names>
            <surname>Englehardt</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Narayanan</surname>
          </string-name>
          , “
          <article-title>Online tracking: A 1-million-site measurement and analysis</article-title>
          ,
          <source>” in Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security</source>
          , ser.
          <source>CCS '16</source>
          . New York, NY, USA: ACM,
          <year>2016</year>
          , pp.
          <fpage>1388</fpage>
          -
          <lpage>1401</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/2976749.2978313
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>P.</given-names>
            <surname>Eckersley</surname>
          </string-name>
          , “
          <article-title>How unique is your web browser?” in Privacy Enhancing Technologies</article-title>
          . Springer,
          <year>2010</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>18</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>P.</given-names>
            <surname>Laperdrix</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Rudametkin</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Baudry</surname>
          </string-name>
          , “
          <article-title>Beauty and the beast: Diverting modern web browsers to build unique browser fingerprints,” in 37th IEEE Symposium on Security and Privacy (S&amp;P</article-title>
          <year>2016</year>
          ),
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>N.</given-names>
            <surname>Doty</surname>
          </string-name>
          , “Mitigating Browser Fingerprinting in Web Specifications,” https://github.com/w3c/fingerprinting-guidance/issues/3,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          <source>[31] “HTML 5.1 W3C Recommendation, 1 November</source>
          <year>2016</year>
          ,” https://www. w3.org/TR/html51/browsers.html
          <article-title>#top-level-browsing-</article-title>
          <string-name>
            <surname>context</surname>
          </string-name>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhu</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>West</surname>
          </string-name>
          , “Secure Contexts,” https://www.w3.org/TR/securecontexts/,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <given-names>M.</given-names>
            <surname>Lamouri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Cceres</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Yaskin</surname>
          </string-name>
          , “
          <string-name>
            <surname>Permissions</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://w3c. github.io/permissions/,
          <year>2016</year>
          , accessed:
          <volume>15</volume>
          .
          <fpage>02</fpage>
          .17.
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kostiainen</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Lamouri</surname>
          </string-name>
          , “
          <string-name>
            <surname>Battery Status</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://www.w3. org/TR/2016/PR-battery-status-
          <volume>20160329</volume>
          ,
          <year>March 2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kostiainen</surname>
          </string-name>
          , “Battery Status Event Specification,” https://www.w3.org/ TR/2011/WD-battery-status-
          <volume>20110426</volume>
          /,
          <year>April 2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36] --, “Battery Status API,” https://www.w3.org/TR/2011/WD-batterystatus-
          <volume>20111129</volume>
          /,
          <year>November 2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kostiainen</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Lamouri</surname>
          </string-name>
          , “
          <string-name>
            <surname>Battery Status</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://www.w3. org/TR/2012/CR-battery-status-
          <volume>20120508</volume>
          /, May
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38] --, “Battery Status API,” https://www.w3.org/TR/2014/CR-batterystatus-
          <volume>20141209</volume>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          [39]
          <string-name>
            <surname>Mozilla</surname>
          </string-name>
          , “
          <article-title>Firefox 10 for developers (release notes</article-title>
          ) ,” https://developer. mozilla.org/en-US/Firefox/Releases/10,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          [40] WebKit, “Changeset 110991.
          <article-title>Support for Battery Status API</article-title>
          .” https: //trac.webkit.org/changeset/110991,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          [41]
          <string-name>
            <surname>“Battery Status</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://www.chromestatus.com/feature/ 4537134732017664,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref42">
        <mixed-citation>
          [42]
          <string-name>
            <surname>Opera</surname>
          </string-name>
          , “Opera 26 Release Notes,” https://www.opera.com/docs/ changelogs/unified/2600/,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref43">
        <mixed-citation>
          [43]
          <string-name>
            <given-names>L.</given-names>
            <surname>Olejnik</surname>
          </string-name>
          , G. Acar,
          <string-name>
            <given-names>C.</given-names>
            <surname>Castelluccia</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Diaz</surname>
          </string-name>
          ,
          <source>The Leaking Battery. Data Privacy Management</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref44">
        <mixed-citation>
          [44]
          <string-name>
            <given-names>L.</given-names>
            <surname>Olejnik</surname>
          </string-name>
          , “Bug 1124127 - Round Off Navigator Battery Level on Linux,” https://bugzilla.mozilla.org/show bug.
          <source>cgi?id=1124127</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref45">
        <mixed-citation>
          [45]
          <string-name>
            <given-names>T.</given-names>
            <surname>Volodine</surname>
          </string-name>
          , “Issue 1229143006:
          <article-title>Enforce restricted precision of the Battery Status API level attribute</article-title>
          (Closed) ,” https://codereview.chromium.
          <source>org/1229143006</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref46">
        <mixed-citation>
          [46]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kostiainen</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Lamouri</surname>
          </string-name>
          , “
          <string-name>
            <surname>Battery Status</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://www.w3. org/TR/battery-status/,
          <year>July 2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref47">
        <mixed-citation>
          [47]
          <string-name>
            <given-names>K.</given-names>
            <surname>Chen</surname>
          </string-name>
          , “This Is Your Brain On Uber,” http://www.npr.org/
          <year>2016</year>
          /05/ 17/478266839/this-is
          <article-title>-your-brain-on-</article-title>
          <string-name>
            <surname>uber</surname>
          </string-name>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref48">
        <mixed-citation>
          [48]
          <string-name>
            <given-names>B.</given-names>
            <surname>Carson</surname>
          </string-name>
          , “
          <article-title>You're more likely to order a pricey Uber ride if your phone is about to die</article-title>
          ,” http://uk.businessinsider.
          <article-title>com/people-with-low-phonebatteries-more-likely-to-accept-uber-surge-</article-title>
          <string-name>
            <surname>pricing-</surname>
          </string-name>
          2016
          <source>-5</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref49">
        <mixed-citation>
          [49]
          <string-name>
            <given-names>J.</given-names>
            <surname>Golson</surname>
          </string-name>
          , “
          <article-title>Uber knows you'll probably pay surge pricing if your battery is about to die</article-title>
          ,” http://www.theverge.com/
          <year>2016</year>
          /5/20/11721890/ uber-surge
          <article-title>-pricing-low-</article-title>
          <string-name>
            <surname>battery</surname>
          </string-name>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref50">
        <mixed-citation>
          [50]
          <string-name>
            <given-names>M.</given-names>
            <surname>Caceres</surname>
          </string-name>
          , “Re: Notes of June 30 teleconference,” https://lists.w3.org/ Archives/Public/public-device-apis/2016Jul/0000.html,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref51">
        <mixed-citation>
          [51]
          <string-name>
            <surname>P.-O. Dehaye</surname>
          </string-name>
          , “
          <string-name>
            <surname>Battery Status</surname>
            <given-names>API</given-names>
          </string-name>
          ,” https://github.com/pdehaye/ BigOther/blob/master/uber/uber first response.xlsx,
          <year>November 2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref52">
        <mixed-citation>
          [52]
          <string-name>
            <given-names>C.</given-names>
            <surname>Peterson</surname>
          </string-name>
          , “
          <article-title>Bug 1313580 - Remove web content access to Battery API</article-title>
          ,” https://bugzilla.mozilla.org/show bug.
          <source>cgi?id=1313580</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref53">
        <mixed-citation>
          [53]
          <string-name>
            <surname>Mozilla</surname>
          </string-name>
          , “Firefox 52 Release Notes,” https://www.mozilla.org/enUS/firefox/52.0/releasenotes/,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref54">
        <mixed-citation>
          [54]
          <string-name>
            <given-names>B.</given-names>
            <surname>Eidson</surname>
          </string-name>
          , “
          <article-title>Bug 164213 - Remove Battery Status API from the tree</article-title>
          ,” https://bugs.webkit.org/show bug.
          <source>cgi?id=164213</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref55">
        <mixed-citation>
          [55]
          <string-name>
            <given-names>L.</given-names>
            <surname>Olejnik</surname>
          </string-name>
          , “Issue 661792 -
          <string-name>
            <surname>Battery</surname>
            <given-names>API</given-names>
          </string-name>
          <article-title>raises privacy issues</article-title>
          ,” https: //bugs.chromium.org/p/chromium/issues/detail?id=
          <fpage>661792</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref56">
        <mixed-citation>
          [56]
          <string-name>
            <surname>Microsoft</surname>
          </string-name>
          , “Platform Status Suggestions,” https://wpdev.uservoice. com/forums/257854-microsoft-edge-developer/suggestions/6263689- battery-status-api,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref57">
        <mixed-citation>
          [57]
          <string-name>
            <given-names>Yandex</given-names>
            <surname>Browser</surname>
          </string-name>
          <string-name>
            <surname>Blog</surname>
          </string-name>
          , “ Beware Evil APIs ,” https://browser.yandex. com/blog/beware-evil-apis,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref58">
        <mixed-citation>
          [58]
          <string-name>
            <given-names>L.</given-names>
            <surname>Olejnik</surname>
          </string-name>
          , “Issue 661792 -
          <string-name>
            <surname>Battery</surname>
            <given-names>API</given-names>
          </string-name>
          <article-title>raises privacy issues</article-title>
          ,” https: //bugs.chromium.org/p/chromium/issues/detail?id=
          <volume>661792</volume>
          #
          <fpage>c4</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref59">
        <mixed-citation>
          [59]
          <string-name>
            <surname>Mozilla</surname>
          </string-name>
          , “
          <article-title>Firefox 52 for developers (release notes</article-title>
          ) ,” https://developer. mozilla.org/en-US/Firefox/Releases/52#Others,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref60">
        <mixed-citation>
          [60]
          <string-name>
            <given-names>A.</given-names>
            <surname>Konstiainen</surname>
          </string-name>
          , “
          <article-title>Allow use from within secure context and top-level browsing context only</article-title>
          ,” https://github.com/w3c/battery/issues/10,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref61">
        <mixed-citation>
          [61]
          <string-name>
            <surname>Chris</surname>
            <given-names>Peterson</given-names>
          </string-name>
          , “Removing the Battery Status API?” https: //groups.google.com/forum/#!msg/mozilla.dev.platform/5U8NHoUY1k/9ybyzQIYCAAJ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref62">
        <mixed-citation>
          [62]
          <string-name>
            <given-names>L.</given-names>
            <surname>Olejnik</surname>
          </string-name>
          , “
          <article-title>Bug 1299454 - Round Off Ambient Light Sensor event</article-title>
          .value ,” https://bugzilla.mozilla.org/show bug.
          <source>cgi?id=1299454</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref63">
        <mixed-citation>
          [63]
          <string-name>
            <surname>Olejnik</surname>
          </string-name>
          , Lukasz, “Issue 642731. Round Off Ambient.
          <article-title>Light Sensor event</article-title>
          .value,” https://bugs.chromium.org/p/chromium/issues/detail? id=
          <fpage>642731</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref64">
        <mixed-citation>
          [64]
          <string-name>
            <given-names>M.</given-names>
            <surname>Perry</surname>
          </string-name>
          , E. Clark, and
          <string-name>
            <given-names>S.</given-names>
            <surname>Murdoch</surname>
          </string-name>
          , “
          <article-title>The Design and Implementation of the Tor Browser</article-title>
          [DRAFT],” https://www.torproject.org/projects/ torbrowser/design/,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref65">
        <mixed-citation>
          [65] “ Issue 507703.
          <article-title>Ads using navigator</article-title>
          .vibrate,” https://bugs.chromium.org/ p/chromium/issues/detail?id=
          <fpage>507703</fpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref66">
        <mixed-citation>
          [66] “Device and Sensors Working Group,” http://www.w3.org/2009/dap/,
          <year>2009</year>
          , accessed:
          <volume>15</volume>
          .
          <fpage>02</fpage>
          .17.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>