NPAPI:ClearSiteData: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
 
(29 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Status =
= Status =


Under consideration.
Accepted, ready for implementation.


= Contributors =
= Contributors =


*Last modified: December 7, 2010
* Last modified: January 6, 2011
*Authors: Julian Reschke (greenbytes), Dan Witte <dwitte@mozilla.com>, Bernhard Bauer <bauerb@chromium.org>, Rajesh Gwalani <rgwalani@adobe.com>
* Authors: Julian Reschke (greenbytes), Dan Witte (Mozilla), Bernhard Bauer (Chromium), Rajesh Gwalani (Adobe), Josh Aas (Mozilla), Maciej Stachowiak (Apple)


= Overview =
= Overview =


Allows browsers to request that plugins clear locally stored private data.
Allows browsers to discover and clear plugin private data.


= Proposal =
= Specification =
 
== Definition of domain ==
 
The return value of NPP_GetSitesWithData and the 'site' argument to NPP_ClearSiteData must be domains only (not complete URIs or IRIs). For ASCII domains, they must be lowercase; in the case of internationalized domains, they must be NFKC-encoded (normalized) UTF-8. No other encoding is allowed. IP address literals must be enclosed in square brackets '[]'. This is in accordance with RFC 3987, Internationalized Resource Identifiers (IRIs).
 
== Discovering Data ==
 
The following method will allow browsers to discover which sites a plugin has data for. Note that plugins (but no instances) must be initialized and function tables retrieved in order to call this method.
 
<pre>
char** NPP_GetSitesWithData(void);
</pre>
 
This function returns a <code>NULL</code>-terminated list of sites with data. Each site string is a domain as specified above under 'Definition of domain'. Memory for the array and the site strings must be allocated with <code>NPN_MemAlloc</code> and the browser will be responsible for freeing the memory with <code>NPN_MemFree</code>.
 
== Clearing Data ==


The following method will allow browsers to request that plugins clear data. Note that plugins (but no instances) must be initialized and function tables retrieved in order to call this method.
The following method will allow browsers to request that plugins clear data. Note that plugins (but no instances) must be initialized and function tables retrieved in order to call this method.
Line 18: Line 34:
<pre>
<pre>
NPError NPP_ClearSiteData(
NPError NPP_ClearSiteData(
   PRUint64 flags,        // what type of data to clear
   const char* site,      // site for which to clear data
   const char* origin,    // limit to origin
  uint64_t flags,        // what type of data to clear
  PRUInt64 maxAge        // max. age of information in seconds
   uint64_t maxAge        // max. age of information in seconds
);
);
</pre>
</pre>


* The <code>site</code> argument is interpreted as follows:
** If <code>NULL</code>, all site-specific data and more generic data on browsing history (for instance, number of sites visited) should be cleared.
** If <code>!NULL</code>, argument is a site string from the discovery API (an exact copy or the original). See above under 'Definition of domain' for the required form of the string. The browser is responsible for allocating and freeing the memory used for this argument. The plugin must copy the string in order to retain it outside the scope of the call.
* The <code>flags</code> argument is a bit mask representing the type(s) of data to clear.
* The <code>flags</code> argument is a bit mask representing the type(s) of data to clear.
<pre>
<pre>
#define NP_CLEAR_ALL                 0           /* Clear All data */
#define NP_CLEAR_ALL     0     /* Clear all private data */
#define NP_CLEAR_COOKIES            1 << 0       /* Clear cookies */
#define NP_CLEAR_CACHE  1 << 0 /* Clear cached data which can simply be
#define NP_CLEAR_SITE_PREFS          1 << 1      /* Clear site preferences */
                                  retrieved again as requested. To be used
#define NP_CLEAR_BROWSING_HISTORY    1 << 2      /* Clear browsing history */
                                  out of concern for space and not necessarily
#define NP_CLEAR_DOWNLOAD_HISTORY    1 << 3      /* Clear download history */
                                  privacy. */
#define NP_CLEAR_FORM_HISTORY        1 << 4      /* Clear form and search history */
/* More flags may be defined later, this spec will be updated. */
#define NP_CLEAR_CACHE              1 << 5      /* Clear cache */
#define NP_CLEAR_PASSWORDS          1 << 6      /* Clear saved passwords */
#define NP_CLEAR_LOGINS              1 << 7      /* Clear active logins */
#define NP_CLEAR_PLUGIN_STORAGE      1 << 8      /* Clear plugin local storage */
</pre>
</pre>
* The <code>origin</code> argument is interpreted as follows:
** If a hostname of the form "foo.com", data in the "foo.com" domain and all subdomains should be cleared. In this form domains must be in lowercase normalized ACE-encoded form, they must not contain a trailing dot, must not contain a scheme, port, or other such fields, and must contain at least one embedded dot.
** If an IP address (either IPv4 or IPv6), data for that IP should be cleared.
** If <code>NULL</code>, all site-specific data and more generic data on browsing history (for instance, number of sites visited) should be cleared.
* The <code>maxAge</code> argument is the maximum age in seconds of data to clear, inclusive. If <code>maxAge</code> is <code>0</code>, no data is cleared. If <code>maxAge</code> is the maximum unsigned 64-bit integer, all data is cleared.
* The <code>maxAge</code> argument is the maximum age in seconds of data to clear, inclusive. If <code>maxAge</code> is <code>0</code>, no data is cleared. If <code>maxAge</code> is the maximum unsigned 64-bit integer, all data is cleared.


The following new NPError values will be available for return from 'NPP_ClearSiteData'.
The following new <code>NPError</code> values will be available for return from <code>NPP_ClearSiteData</code>:


<pre>
<pre>
// can't clear by time range
// can't clear by time range
#define NPERR_TIMERANGE_NOT_SUPPORTED (NPERR_BASE + 14)
#define NPERR_TIME_RANGE_NOT_SUPPORTED (NPERR_BASE + 14)
// can't clear by origin
// malformed 'site' string
#define NPERR_LIMITBYORIGIN_NOT_SUPPORTED (NPERR_BASE + 15)
#define NPERR_MALFORMED_SITE (NPERR_BASE + 15)
// malformed 'origin' string
#define NPERR_MALFORMED_ORIGIN (NPERR_BASE + 16)
</pre>
</pre>


= Open Issues  =
For any other type of error the plugin must return <code>NPERR_GENERIC_ERROR</code>.


* Make sure this API is available when no instances exist.
If site data is in use by an instance of the plugin when <code>NPP_ClearSiteData</code> is called then it is up to the plugin to do the right thing.
* Do we need a discovery method?
* What is the syntax for an IPv6 address in site? As per RFC 3986 "IP-literal" ([http://greenbytes.de/tech/webdav/rfc3986.html#host.ip])?
* Make sure this API allows for a "forget about this site" UI, which Firefox has.


= Notes =
= Notes =


== Overview of current UIs ==
Notes for this specification are [[NPAPI:ClearPrivateDataNotes|here]].
 
{|
! Type || Firefox || IE || Opera || Safari || Chrome
|-
! Browsing History
| yes || yes || yes || yes || yes
|-
! Download History
| yes || yes || yes || yes || yes
|-
! Form History
| yes || yes || ? || yes || yes
|-
!  Search History
| yes || ? || ? || ? || ?
|-
! Cookies
| yes || yes || temporary/all || yes || yes
|-
! Cache
| yes || yes || yes || yes || yes
|-
! Active Logins
| yes || yes || "password manager" || yes || yes
|-
! Site Preferences
| yes || ? || ? || ? || ?
|}
 
In addition, IE has "InPrivate Filtering Data" (what is this?)
 
In addition, Opera has "delete password protected pages and data" and "bookmark visited times".
 
In addition, Safari has "webpage preview images", "website icons" and "top sites"
 
{|
! Parameters || Firefox || IE || Opera || Safari || Chrome
|-
! Time Range
| yes || no || no || no || yes
|-
! By Site
| yes (context menu in history) || ?? || ?? || ?? || ??
|}
 
=== Type of Data ===
 
* things the user enters, except for credentials (form data)
* credentials
* things cached by the UA (pages, preview images, icons)
* local data stored by the server / web application (cookies, HTML5 local storage, Flash/Silverlight local storage)
* history information (bookmarks, visited URIs)
* settings specific to a site (for instance, preferences with respect to privacy, script disabling...)
 
=== Time range ===
 
Several UAs offer to restrict the clear operation to a time range such as "today" or "last week".
 
=== Site/URI ===
 
Firefox supports "forget about this site". Other UAs do not appear to support this.
 
== Existing Discussion and Documentation ==
 
Mail thread on plugin-futures: [https://mail.mozilla.org/private/plugin-futures/2010-January/001150.html https://mail.mozilla.org/private/plugin-futures/2010-January/001150.html]
 
In particular, Lloyd Hilaiel proposed an alternate approach where plugins would store everything in a standard filesystem based layout, so the UA itself can do the clearing. See [https://mail.mozilla.org/private/plugin-futures/2010-January/001156.html https://mail.mozilla.org/private/plugin-futures/2010-January/001156.html]
 
Flash Local Storage: [http://www.macromedia.com/support/documentation/en/flashplayer/help/help02.html http://www.macromedia.com/support/documentation/en/flashplayer/help/help02.html]
 
Firefox issue - clearing local storage with time range: [https://bugzilla.mozilla.org/show_bug.cgi?id=527667 https://bugzilla.mozilla.org/show_bug.cgi?id=527667]

Latest revision as of 20:57, 6 January 2011

Status

Accepted, ready for implementation.

Contributors

  • Last modified: January 6, 2011
  • Authors: Julian Reschke (greenbytes), Dan Witte (Mozilla), Bernhard Bauer (Chromium), Rajesh Gwalani (Adobe), Josh Aas (Mozilla), Maciej Stachowiak (Apple)

Overview

Allows browsers to discover and clear plugin private data.

Specification

Definition of domain

The return value of NPP_GetSitesWithData and the 'site' argument to NPP_ClearSiteData must be domains only (not complete URIs or IRIs). For ASCII domains, they must be lowercase; in the case of internationalized domains, they must be NFKC-encoded (normalized) UTF-8. No other encoding is allowed. IP address literals must be enclosed in square brackets '[]'. This is in accordance with RFC 3987, Internationalized Resource Identifiers (IRIs).

Discovering Data

The following method will allow browsers to discover which sites a plugin has data for. Note that plugins (but no instances) must be initialized and function tables retrieved in order to call this method.

char** NPP_GetSitesWithData(void);

This function returns a NULL-terminated list of sites with data. Each site string is a domain as specified above under 'Definition of domain'. Memory for the array and the site strings must be allocated with NPN_MemAlloc and the browser will be responsible for freeing the memory with NPN_MemFree.

Clearing Data

The following method will allow browsers to request that plugins clear data. Note that plugins (but no instances) must be initialized and function tables retrieved in order to call this method.

NPError NPP_ClearSiteData(
   const char* site,       // site for which to clear data
   uint64_t flags,         // what type of data to clear
   uint64_t maxAge         // max. age of information in seconds
);
  • The site argument is interpreted as follows:
    • If NULL, all site-specific data and more generic data on browsing history (for instance, number of sites visited) should be cleared.
    • If !NULL, argument is a site string from the discovery API (an exact copy or the original). See above under 'Definition of domain' for the required form of the string. The browser is responsible for allocating and freeing the memory used for this argument. The plugin must copy the string in order to retain it outside the scope of the call.
  • The flags argument is a bit mask representing the type(s) of data to clear.
#define NP_CLEAR_ALL     0      /* Clear all private data */
#define NP_CLEAR_CACHE   1 << 0 /* Clear cached data which can simply be
                                   retrieved again as requested. To be used
                                   out of concern for space and not necessarily
                                   privacy. */
/* More flags may be defined later, this spec will be updated. */
  • The maxAge argument is the maximum age in seconds of data to clear, inclusive. If maxAge is 0, no data is cleared. If maxAge is the maximum unsigned 64-bit integer, all data is cleared.

The following new NPError values will be available for return from NPP_ClearSiteData:

// can't clear by time range
#define NPERR_TIME_RANGE_NOT_SUPPORTED (NPERR_BASE + 14)
// malformed 'site' string
#define NPERR_MALFORMED_SITE (NPERR_BASE + 15)

For any other type of error the plugin must return NPERR_GENERIC_ERROR.

If site data is in use by an instance of the plugin when NPP_ClearSiteData is called then it is up to the plugin to do the right thing.

Notes

Notes for this specification are here.