[html5] r4374 - [cgiowt] (0) Remove Web Database from the WHATWG complete spec; say that sqlite [...]
whatwg at whatwg.org
whatwg at whatwg.org
Tue Nov 3 15:01:04 PST 2009
Author: ianh
Date: 2009-11-03 15:00:59 -0800 (Tue, 03 Nov 2009)
New Revision: 4374
Modified:
complete.html
entities-unicode.inc
index
source
Log:
[cgiowt] (0) Remove Web Database from the WHATWG complete spec; say that sqlite is the expected language; update the character references to the latest set.
Modified: complete.html
===================================================================
--- complete.html 2009-11-02 00:43:24 UTC (rev 4373)
+++ complete.html 2009-11-03 23:00:59 UTC (rev 4374)
@@ -110,7 +110,7 @@
<header class=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG src=/images/logo></a></p>
<hgroup><h1>Web Applications 1.0</h1>
- <h2 class="no-num no-toc">Draft Standard — 2 November 2009</h2>
+ <h2 class="no-num no-toc">Draft Standard — 3 November 2009</h2>
</hgroup><p>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></p>
<p><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</p>
<!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
@@ -172,7 +172,6 @@
<li><a href=http://www.whatwg.org/specs/web-workers/current-work/>Web Workers at the WHATWG</a>,
<a href=http://dev.w3.org/html5/workers/Overview.html>Web Workers at the W3C</a>
<li><a href=http://dev.w3.org/html5/webstorage>Web Storage at the W3C</a>
- <li><a href=http://dev.w3.org/html5/webdatabase/>Web Database at the W3C</a>
<li><a href=http://dev.w3.org/html5/eventsource/>Server-sent events at the W3C</a>
<li><a href=http://dev.w3.org/html5/websockets/>Web Sockets API at the W3C</a>
<li><a href=http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol>Web Sockets Protocol at the IETF</a>
@@ -784,51 +783,28 @@
<li><a href=#link-type-next><span class=secno>6.12.3.18.3 </span>Link type "<code>next</code>"</a></li>
<li><a href=#link-type-prev><span class=secno>6.12.3.18.4 </span>Link type "<code>prev</code>"</a></ol></li>
<li><a href=#other-link-types><span class=secno>6.12.3.19 </span>Other link types</a></ol></ol></ol></li>
- <li><a href=#storage-and-database><span class=secno>7 </span>Structured client-side storage APIs</a>
+ <li><a href=#webstorage><span class=secno>7 </span>Web Storage</a>
<ol>
- <li><a href=#web-storage><span class=secno>7.1 </span>Web Storage</a>
+ <li><a href=#introduction-4><span class=secno>7.1 </span>Introduction</a></li>
+ <li><a href=#storage><span class=secno>7.2 </span>The API</a>
<ol>
- <li><a href=#introduction-4><span class=secno>7.1.1 </span>Introduction</a></li>
- <li><a href=#storage><span class=secno>7.1.2 </span>The API</a>
+ <li><a href=#the-storage-interface><span class=secno>7.2.1 </span>The <code>Storage</code> interface</a></li>
+ <li><a href=#the-sessionstorage-attribute><span class=secno>7.2.2 </span>The <code title=dom-sessionStorage>sessionStorage</code> attribute</a></li>
+ <li><a href=#the-localstorage-attribute><span class=secno>7.2.3 </span>The <code title=dom-localStorage>localStorage</code> attribute</a></li>
+ <li><a href=#the-storage-event><span class=secno>7.2.4 </span>The <code title=event-storage>storage</code> event</a>
<ol>
- <li><a href=#the-storage-interface><span class=secno>7.1.2.1 </span>The <code>Storage</code> interface</a></li>
- <li><a href=#the-sessionstorage-attribute><span class=secno>7.1.2.2 </span>The <code title=dom-sessionStorage>sessionStorage</code> attribute</a></li>
- <li><a href=#the-localstorage-attribute><span class=secno>7.1.2.3 </span>The <code title=dom-localStorage>localStorage</code> attribute</a></li>
- <li><a href=#the-storage-event><span class=secno>7.1.2.4 </span>The <code title=event-storage>storage</code> event</a>
- <ol>
- <li><a href=#event-definition-0><span class=secno>7.1.2.4.1 </span>Event definition</a></ol></li>
- <li><a href=#threads><span class=secno>7.1.2.5 </span>Threads</a></ol></ol></li>
- <li><a href=#web-database><span class=secno>7.2 </span>Web Database</a>
+ <li><a href=#event-definition-0><span class=secno>7.2.4.1 </span>Event definition</a></ol></li>
+ <li><a href=#threads><span class=secno>7.2.5 </span>Threads</a></ol></li>
+ <li><a href=#disk-space><span class=secno>7.3 </span>Disk space</a></li>
+ <li><a href=#privacy><span class=secno>7.4 </span>Privacy</a>
<ol>
- <li><a href=#introduction-5><span class=secno>7.2.1 </span>Introduction</a></li>
- <li><a href=#sql><span class=secno>7.2.2 </span>The API</a>
- <ol>
- <li><a href=#databases><span class=secno>7.2.2.1 </span>Databases</a></li>
- <li><a href=#parsing-and-processing-sql-statements><span class=secno>7.2.2.2 </span>Parsing and processing SQL statements</a></li>
- <li><a href=#asynchronous-database-api><span class=secno>7.2.2.3 </span>Asynchronous database API</a>
- <ol>
- <li><a href=#executing-sql-statements><span class=secno>7.2.2.3.1 </span>Executing SQL statements</a></li>
- <li><a href=#processing-model-3><span class=secno>7.2.2.3.2 </span>Processing model</a></ol></li>
- <li><a href=#synchronous-database-api><span class=secno>7.2.2.4 </span>Synchronous database API</a>
- <ol>
- <li><a href=#executing-sql-statements-0><span class=secno>7.2.2.4.1 </span>Executing SQL statements</a></ol></li>
- <li><a href=#database-query-results><span class=secno>7.2.2.5 </span>Database query results</a></li>
- <li><a href=#errors-and-exceptions><span class=secno>7.2.2.6 </span>Errors and exceptions</a></ol></li>
- <li><a href=#web-sql><span class=secno>7.2.3 </span>Web SQL</a></ol></li>
- <li><a href=#common-concerns><span class=secno>7.3 </span>Common concerns</a>
+ <li><a href=#user-tracking><span class=secno>7.4.1 </span>User tracking</a></li>
+ <li><a href=#sensitivity-of-data><span class=secno>7.4.2 </span>Sensitivity of data</a></ol></li>
+ <li><a href=#security-4><span class=secno>7.5 </span>Security</a>
<ol>
- <li><a href=#disk-space><span class=secno>7.3.1 </span>Disk space</a></li>
- <li><a href=#privacy><span class=secno>7.3.2 </span>Privacy</a>
- <ol>
- <li><a href=#user-tracking><span class=secno>7.3.2.1 </span>User tracking</a></li>
- <li><a href=#sensitivity-of-data><span class=secno>7.3.2.2 </span>Sensitivity of data</a></ol></li>
- <li><a href=#security-4><span class=secno>7.3.3 </span>Security</a>
- <ol>
- <li><a href=#dns-spoofing-attacks><span class=secno>7.3.3.1 </span>DNS spoofing attacks</a></li>
- <li><a href=#cross-directory-attacks><span class=secno>7.3.3.2 </span>Cross-directory attacks</a></li>
- <li><a href=#implementation-risks><span class=secno>7.3.3.3 </span>Implementation risks</a></li>
- <li><a href=#sql-and-user-agents><span class=secno>7.3.3.4 </span>SQL and user agents</a></li>
- <li><a href=#sql-injection><span class=secno>7.3.3.5 </span>SQL injection</a></ol></ol></ol></li>
+ <li><a href=#dns-spoofing-attacks><span class=secno>7.5.1 </span>DNS spoofing attacks</a></li>
+ <li><a href=#cross-directory-attacks><span class=secno>7.5.2 </span>Cross-directory attacks</a></li>
+ <li><a href=#implementation-risks><span class=secno>7.5.3 </span>Implementation risks</a></ol></ol></li>
<li><a href=#editing><span class=secno>8 </span>User Interaction</a>
<ol>
<li><a href=#the-hidden-attribute><span class=secno>8.1 </span>The <code>hidden</code> attribute</a></li>
@@ -852,7 +828,7 @@
<li><a href=#spelling-and-grammar-checking><span class=secno>8.8 </span>Spelling and grammar checking</a></li>
<li><a href=#dnd><span class=secno>8.9 </span>Drag and drop</a>
<ol>
- <li><a href=#introduction-6><span class=secno>8.9.1 </span>Introduction</a></li>
+ <li><a href=#introduction-5><span class=secno>8.9.1 </span>Introduction</a></li>
<li><a href=#the-dragevent-and-datatransfer-interfaces><span class=secno>8.9.2 </span>The <code>DragEvent</code> and <code>DataTransfer</code> interfaces</a></li>
<li><a href=#dndevents><span class=secno>8.9.3 </span>Events fired during a drag-and-drop action</a></li>
<li><a href=#drag-and-drop-processing-model><span class=secno>8.9.4 </span>Drag-and-drop processing model</a>
@@ -880,7 +856,7 @@
<li><a href=#editing-apis><span class=secno>8.11 </span>Editing APIs</a></ol></li>
<li><a href=#workers><span class=secno>9 </span>Web Workers</a>
<ol>
- <li><a href=#introduction-7><span class=secno>9.1 </span>Introduction</a>
+ <li><a href=#introduction-6><span class=secno>9.1 </span>Introduction</a>
<ol>
<li><a href=#scope-0><span class=secno>9.1.1 </span>Scope</a></li>
<li><a href=#tutorial><span class=secno>9.1.2 </span>Tutorial</a>
@@ -901,7 +877,7 @@
<li><a href=#origins-of-workers><span class=secno>9.2.2 </span>Origins of workers</a></li>
<li><a href=#the-event-loop><span class=secno>9.2.3 </span>The event loop</a></li>
<li><a href="#the-worker's-lifetime"><span class=secno>9.2.4 </span>The worker's lifetime</a></li>
- <li><a href=#processing-model-4><span class=secno>9.2.5 </span>Processing model</a></li>
+ <li><a href=#processing-model-3><span class=secno>9.2.5 </span>Processing model</a></li>
<li><a href=#runtime-script-errors-0><span class=secno>9.2.6 </span>Runtime script errors</a></li>
<li><a href=#creating-workers><span class=secno>9.2.7 </span>Creating workers</a>
<ol>
@@ -922,7 +898,7 @@
<ol>
<li><a href=#server-sent-events-intro><span class=secno>10.2.1 </span>Introduction</a></li>
<li><a href=#the-eventsource-interface><span class=secno>10.2.2 </span>The <code>EventSource</code> interface</a></li>
- <li><a href=#processing-model-5><span class=secno>10.2.3 </span>Processing model</a></li>
+ <li><a href=#processing-model-4><span class=secno>10.2.3 </span>Processing model</a></li>
<li><a href=#parsing-an-event-stream><span class=secno>10.2.4 </span>Parsing an event stream</a></li>
<li><a href=#event-stream-interpretation><span class=secno>10.2.5 </span>Interpreting an event stream</a></li>
<li><a href=#notes><span class=secno>10.2.6 </span>Notes</a></li>
@@ -950,7 +926,7 @@
multiple HTTP connections (e.g. using XMLHttpRequest or
<iframe>s and long polling)."><span class=secno>10.3.4 </span>The Web Socket protocol</a>
<ol>
- <li><a href=#introduction-8><span class=secno>10.3.4.1 </span>Introduction</a>
+ <li><a href=#introduction-7><span class=secno>10.3.4.1 </span>Introduction</a>
<ol>
<li><a href=#background-0><span class=secno>10.3.4.1.1 </span>Background</a></li>
<li><a href=#protocol-overview><span class=secno>10.3.4.1.2 </span>Protocol overview</a></li>
@@ -986,7 +962,7 @@
<li><a href=#using-the-web-socket-protocol-from-other-specifications><span class=secno>10.3.4.8 </span>Using the Web Socket protocol from other specifications</a></ol></ol></li>
<li><a href=#crossDocumentMessages><span class=secno>10.4 </span>Cross-document messaging</a>
<ol>
- <li><a href=#introduction-9><span class=secno>10.4.1 </span>Introduction</a></li>
+ <li><a href=#introduction-8><span class=secno>10.4.1 </span>Introduction</a></li>
<li><a href=#security-5><span class=secno>10.4.2 </span>Security</a>
<ol>
<li><a href=#authors><span class=secno>10.4.2.1 </span>Authors</a></li>
@@ -1154,10 +1130,10 @@
<li><a href=#parsing-xhtml-fragments><span class=secno>12.4 </span>Parsing XHTML fragments</a></ol></li>
<li><a href=#rendering><span class=secno>13 </span>Rendering</a>
<ol>
- <li><a href=#introduction-10><span class=secno>13.1 </span>Introduction</a></li>
+ <li><a href=#introduction-9><span class=secno>13.1 </span>Introduction</a></li>
<li><a href=#the-css-user-agent-style-sheet-and-presentational-hints><span class=secno>13.2 </span>The CSS user agent style sheet and presentational hints</a>
<ol>
- <li><a href=#introduction-11><span class=secno>13.2.1 </span>Introduction</a></li>
+ <li><a href=#introduction-10><span class=secno>13.2.1 </span>Introduction</a></li>
<li><a href=#display-types><span class=secno>13.2.2 </span>Display types</a></li>
<li><a href=#margins-and-padding><span class=secno>13.2.3 </span>Margins and padding</a></li>
<li><a href=#alignment><span class=secno>13.2.4 </span>Alignment</a></li>
@@ -1175,7 +1151,7 @@
<li><a href=#toolbars-0><span class=secno>13.3.5 </span>Toolbars</a></ol></li>
<li><a href=#bindings><span class=secno>13.4 </span>Bindings</a>
<ol>
- <li><a href=#introduction-12><span class=secno>13.4.1 </span>Introduction</a></li>
+ <li><a href=#introduction-11><span class=secno>13.4.1 </span>Introduction</a></li>
<li><a href=#the-button-element-0><span class=secno>13.4.2 </span>The <code>button</code> element</a></li>
<li><a href=#the-details-element-0><span class=secno>13.4.3 </span>The <code>details</code> element</a></li>
<li><a href=#the-input-element-as-a-text-entry-widget><span class=secno>13.4.4 </span>The <code>input</code> element as a text entry widget</a></li>
@@ -1544,10 +1520,10 @@
with multiple pages, links between pages, and running scripts.</dd>
- <dt><a href=#storage-and-database>Structured client-side storage APIs</a></dt>
+ <dt><a href=#webstorage>Web Storage</a></dt>
- <dd>This specification defines two client-side storage mechanisms:
- a flat storage mechanism, and an API based on SQL databases.</dd>
+ <dd>This specification defines a client-side storage mechanism
+ based on name-value pairs.</dd>
<dt><a href=#editing>User Interaction</a></dt>
@@ -57870,15 +57846,12 @@
+ <h2 id=webstorage><span class=secno>7 </span>Web Storage</h2>
- <h2 id=storage-and-database><span class=secno>7 </span>Structured client-side storage APIs</h2>
- <h3 id=web-storage><span class=secno>7.1 </span>Web Storage</h3>
+ <h3 id=introduction-4><span class=secno>7.1 </span>Introduction</h3>
-
- <h4 id=introduction-4><span class=secno>7.1.1 </span>Introduction</h4>
-
<p><i>This section is non-normative.</i></p>
<p>This specification introduces two related mechanisms, similar to
@@ -57973,9 +57946,9 @@
- <h4 id=storage><span class=secno>7.1.2 </span>The API</h4>
+ <h3 id=storage><span class=secno>7.2 </span>The API</h3>
- <h5 id=the-storage-interface><span class=secno>7.1.2.1 </span>The <code><a href=#storage-0>Storage</a></code> interface</h5>
+ <h4 id=the-storage-interface><span class=secno>7.2.1 </span>The <code><a href=#storage-0>Storage</a></code> interface</h4>
<pre class=idl>interface <dfn id=storage-0>Storage</dfn> {
readonly attribute unsigned long <a href=#dom-storage-length title=dom-Storage-length>length</a>;
@@ -58097,7 +58070,7 @@
underlying list of key/value pairs see is required.</p>
- <h5 id=the-sessionstorage-attribute><span class=secno>7.1.2.2 </span>The <code title=dom-sessionStorage><a href=#dom-sessionstorage>sessionStorage</a></code> attribute</h5>
+ <h4 id=the-sessionstorage-attribute><span class=secno>7.2.2 </span>The <code title=dom-sessionStorage><a href=#dom-sessionstorage>sessionStorage</a></code> attribute</h4>
<pre class=idl>[Supplemental, NoInterfaceObject]
interface <span>WindowSessionStorage</span> {
@@ -58163,7 +58136,7 @@
storage area, other than <var title="">x</var>, a <code title=event-storage><a href=#event-storage>storage</a></code> event must be fired, as <a href=#event-storage title=event-storage>described below</a>.</p>
- <h5 id=the-localstorage-attribute><span class=secno>7.1.2.3 </span>The <code title=dom-localStorage><a href=#dom-localstorage>localStorage</a></code> attribute</h5>
+ <h4 id=the-localstorage-attribute><span class=secno>7.2.3 </span>The <code title=dom-localStorage><a href=#dom-localstorage>localStorage</a></code> attribute</h4>
<pre class=idl>[Supplemental, NoInterfaceObject]
interface <span>WindowLocalStorage</span> {
@@ -58220,7 +58193,7 @@
- <h5 id=the-storage-event><span class=secno>7.1.2.4 </span>The <code title=event-storage><a href=#event-storage>storage</a></code> event</h5>
+ <h4 id=the-storage-event><span class=secno>7.2.4 </span>The <code title=event-storage><a href=#event-storage>storage</a></code> event</h4>
<p>The <dfn id=event-storage title=event-storage><code>storage</code></dfn> event
is fired when a storage area changes, as described in the previous
@@ -58264,7 +58237,7 @@
local).</p>
- <h6 id=event-definition-0><span class=secno>7.1.2.4.1 </span>Event definition</h6>
+ <h5 id=event-definition-0><span class=secno>7.2.4.1 </span>Event definition</h5>
<pre class=idl>interface <dfn id=storageevent>StorageEvent</dfn> : Event {
readonly attribute DOMString <a href=#dom-storageevent-key title=dom-StorageEvent-key>key</a>;
@@ -58298,7 +58271,7 @@
- <h5 id=threads><span class=secno>7.1.2.5 </span>Threads</h5>
+ <h4 id=threads><span class=secno>7.2.5 </span>Threads</h4>
<p>Because of <a href=#localStorageMutex>the use</a> of the
<a href=#storage-mutex>storage mutex</a>, multiple browsing contexts will be able
@@ -58312,929 +58285,15 @@
itself.</p>
-
- <h3 id=web-database><span class=secno>7.2 </span>Web Database</h3>
-
-
- <!-- Feature requests for future versions (v2):
- * deleting databases
- * determining how much storage room is left
- * handling the database getting corrupted
- -->
-
- <h4 id=introduction-5><span class=secno>7.2.1 </span>Introduction</h4>
-
- <p><i>This section is non-normative.</i></p>
-
- <p>This specification introduces a set of APIs to manipulate
- client-side databases using SQL.</p>
-
- <p>The API is asynchronous, so authors are likely to find anonymous
- functions (lambdas) very useful in using this API.</p>
-
- <p>Here is an example of a script using this API. First, a function
- <code title="">prepareDatabase()</code> is defined. This function
- tries to create the database if necessary, giving it one table
- called "docids" with two columns ("id" and "name"). If it is
- successful, or if the table doesn't need creating, it calls a
- section function, <code title="">getDatabase()</code>, which obtains
- a handle to the database, and then calls the function to do the
- actual work, in this case <code title="">showDocCount()</code>.</p>
-
- <pre>function prepareDatabase(ready, error) {
- return openDatabase('documents', '1.0', 'Offline document storage', 5*1024*1024, function (db) {
- db.changeVersion('', '1.0', function (t) {
- t.executeSql('CREATE TABLE docids (id, name)');
- }, error);
- });
-}
-
-function showDocCount(db, span) {
- db.readTransaction(function (t) {
- t.executeSql('SELECT COUNT(*) AS c FROM docids', [], function (t, r) {
- span.textContent = r.rows[0].c;
- }, function (t, e) {
- // couldn't read database
- span.textContent = '(unknown: ' + e.message + ')';
- });
- });
-}
-
-prepareDatabase(function(db) {
- // got database
- var span = document.getElementById('doc-count');
- showDocCount(db, span);
-}, function (e) {
- // error getting database
- alert(e.message);
-});</pre>
-
- <hr><p>The <code title=dom-sqltransaction-executeSql><a href=#dom-sqltransaction-executesql>executeSql()</a></code> method has
- an argument intended to allow variables to be substituted into
- statements without risking SQL injection vulnerabilities:</p>
-
- <pre>db.readTransaction(function (t) {
- t.executeSql('SELECT title, author FROM docs WHERE id=?', [id], function (t, data) {
- report(data.rows[0].title, data.rows[0].author);
- });
-});</pre>
-
- <hr><p>Sometimes, there might be an arbitrary number of variables to
- substitute in. Even in these case, the right solution is to
- construct the query using only "?" characters, and then to pass the
- variables in as the second argument:</p>
-
-<pre>function findDocs(db, resultCallback) {
- var q = "";
- for each (var i in labels)
- q += (q == "" ? "" : ", ") + "?";
- db.readTransaction(function (t) {
- t.executeSql('SELECT id FROM docs WHERE label IN (' + q + ')', labels, function (t, data) {
- resultCallback(data);
- });
- });
-}</pre>
-
-
- <h4 id=sql><span class=secno>7.2.2 </span>The API</h4>
-
- <h5 id=databases><span class=secno>7.2.2.1 </span>Databases</h5>
-
- <p>Each <i><a href=#origin>origin</a></i> has an associated set of databases. Each
- database has a name and a current version. There is no way to
- enumerate or delete the databases available for an origin from this
- API.</p>
-
- <p class=note>Each database has one version at a time; a database
- can't exist in multiple versions at once. Versions are intended to
- allow authors to manage schema changes incrementally and
- non-destructively, and without running the risk of old code (e.g. in
- another browser window) trying to write to a database with incorrect
- assumptions.</p>
-
- <pre class=idl>[Supplemental, NoInterfaceObject]
-interface <span>WindowDatabase</span> {
- <a href=#database>Database</a> <a href=#dom-opendatabase title=dom-opendatabase>openDatabase</a>(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in optional <a href=#databasecallback>DatabaseCallback</a> creationCallback);
-};
-<a href=#window>Window</a> implements <span>WindowDatabase</span>;
-
-[Supplemental, NoInterfaceObject]
-interface <span>WorkerUtilsDatabase</span> {
- <a href=#database>Database</a> <a href=#dom-opendatabase title=dom-opendatabase>openDatabase</a>(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in optional <a href=#databasecallback>DatabaseCallback</a> creationCallback);
- <a href=#databasesync>DatabaseSync</a> <a href=#dom-opendatabase-sync title=dom-opendatabase-sync>openDatabaseSync</a>(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in optional <a href=#databasecallback>DatabaseCallback</a> creationCallback);
-};
-<a href=#workerutils>WorkerUtils</a> implements <span>WorkerUtilsDatabase</span>;
-
-[Callback=FunctionOnly, NoInterfaceObject]
-interface <dfn id=databasecallback>DatabaseCallback</dfn> {
- void <span title=dom-databasecallback-handleEvent>handleEvent</span>(in <a href=#database>Database</a> database);
-};</pre>
-
- <p>The <dfn id=dom-opendatabase title=dom-opendatabase><code>openDatabase()</code></dfn> method on
- the <code><a href=#window>Window</a></code> and <code><a href=#workerutils>WorkerUtils</a></code> interfaces and
- the <dfn id=dom-opendatabase-sync title=dom-opendatabase-sync><code>openDatabaseSync()</code></dfn>
- method on the <code><a href=#workerutils>WorkerUtils</a></code> interface take the following
- arguments: a database name, a database version, a display name, an
- estimated size — in bytes — of the data that will be
- stored in the database, and optionally a callback to be invoked if
- the database has not yet been created. The callback, if provided, is
- intended to be used to call <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>; the
- callback is invoked with the database having the empty string as its
- version regardless of the given database version. If the callback is
- not provided, the database is created with the given database
- version as its version.</p>
-
- <p>When invoked, these methods must run the following steps, with all
- but the last two steps being run atomically:</p>
-
- <ol><li>
-
- <p>The user agent may raise a <code><a href=#security_err>SECURITY_ERR</a></code> exception
- instead of returning a <code><a href=#database>Database</a></code> object if the request
- violates a policy decision (e.g. if the user agent is configured
- to not allow the page to open databases).</p>
-
- </li>
-
- <li>
-
- <p>For the method on the <code><a href=#window>Window</a></code> object: let <var title="">origin</var> be the <a href=#origin>origin</a> of the
- <a href=#active-document>active document</a> of the <a href=#browsing-context>browsing context</a>
- of the <code><a href=#window>Window</a></code> object on which the method was
- invoked.</p>
-
- <p>For the methods on the <code><a href=#workerutils>WorkerUtils</a></code> object: let
- <var title="">origin</var> be the <a href=#origin>origin</a> of the
- scripts in the worker.</p>
-
- </li>
-
- <li><p>If the database version provided is not the empty string,
- and there is already a database with the given name from the origin
- <var title="">origin</var>, but the database has a different
- version than the version provided, then throw an
- <code><a href=#invalid_state_err>INVALID_STATE_ERR</a></code> exception and abort these
- steps.</li>
-
- <li>
-
- <p>If no database with the given name from the origin <var title="">origin</var> exists, then create the database and let
- <var title="">created</var> be true. If a callback was passed to
- the method, then set the new database's version to the empty
- string. Otherwise, set the new database's version to the given
- database version.</p>
-
- <p>Otherwise, if a database with the given name already exists,
- let <var title="">created</var> be false.</p>
-
- </li>
-
- <li>
-
- <p>For the <code title=dom-opendatabase><a href=#dom-opendatabase>openDatabase()</a></code>
- methods: let <var title="">result</var> be a newly constructed
- <code><a href=#database>Database</a></code> object representing the database with the
- given database name from the origin <var title="">origin</var>.</p>
-
- <p>For the <code title=dom-opendatabase-sync><a href=#dom-opendatabase-sync>openDatabaseSync()</a></code> method:
- let <var title="">result</var> be a newly constructed
- <code><a href=#databasesync>DatabaseSync</a></code> object representing the database with
- the given database name from the origin <var title="">origin</var>.</p>
-
- </li>
-
- <li>
-
- <p>If <var title="">created</var> is false or if no callback was
- passed to the method, skip this step. Otherwise:</p>
-
- <p>For the <code title=dom-opendatabase><a href=#dom-opendatabase>openDatabase()</a></code>
- methods: <a href=#queue-a-task>queue a task</a> to to invoke the callback with
- <var title="">result</var> as its only argument.</p>
-
- <p>For the <code title=dom-opendatabase-sync><a href=#dom-opendatabase-sync>openDatabaseSync()</a></code> method:
- invoke the callback with <var title="">result</var> as its only
- argument. If the callback throws an exception, rethrow that
- exception and abort these steps.</p>
-
- </li>
-
- <li>
-
- <p>Return <var title="">result</var>.</p>
-
- </li>
-
- </ol><p>All strings including the empty string are valid database
- names. Database names must be compared in a
- <a href=#case-sensitive>case-sensitive</a> manner.</p>
-
- <p class=note>Implementations can support this even in
- environments that only support a subset of all strings as database
- names by mapping database names (e.g. using a hashing algorithm) to
- the supported set of names.</p>
-
- <p>The version that the database was opened with is the <dfn id=concept-database-expected-version title=concept-database-expected-version>expected version</dfn> of
- this <code><a href=#database>Database</a></code> or <code><a href=#databasesync>DatabaseSync</a></code> object. It
- can be the empty string, in which case there is no expected version
- — any version is fine.</p>
-
- <p>User agents are expected to use the display name and the
- estimated database size to optimize the user experience. For
- example, a user agent could use the estimated size to suggest an
- initial quota to the user. This allows a site that is aware that it
- will try to use hundreds of megabytes to declare this upfront,
- instead of the user agent prompting the user for permission to
- increase the quota every five megabytes.</p>
-
-
- <h5 id=parsing-and-processing-sql-statements><span class=secno>7.2.2.2 </span>Parsing and processing SQL statements</h5>
-
- <p>When the user agent is to <dfn id=preprocess-the-sql-statement title="preprocess the SQL
- statement">preprocess a SQL statement</dfn> <var title="">sqlStatement</var> with an array of arguments <var title="">arguments</var>, it must run the following steps:</p>
-
- <ol><li><p>Parse <var title="">sqlStatement</var> as a SQL statement,
- with the exception that U+003F QUESTION MARK characters (?) can be
- used in place of SQL literals in the statement. <a href=#refsSQL>[SQL]</a></li>
-
- <li>
-
- <p>Replace each <code title="">?</code> placeholder with the value
- of the argument in the <var title="">arguments</var> array with
- the same position. (So the first <code title="">?</code>
- placeholder gets replaced by the first value in the <var title="">arguments</var> array, and generally the <var title="">n</var>th <code title="">?</code> placeholder gets
- replaced by the <var title="">n</var>th value in the <var title="">arguments</var> array.)</p>
-
- <p class=note>Substitutions for <code title="">?</code>
- placeholders are done at the literal level, not as string
- concatenations, so this provides a way to dynamically insert
- parameters into a statement without risk of a SQL injection
- attack.</p>
-
- <p>The result is <var title="">the statement</var>.</p>
-
- </li>
-
- <li><p>If the <code><a href=#database>Database</a></code> object that the
- <code><a href=#sqltransaction>SQLTransaction</a></code> or <code><a href=#sqltransactionsync>SQLTransactionSync</a></code>
- object was created from has an <a href=#concept-database-expected-version title=concept-database-expected-version>expected version</a>
- that is neither the empty string nor the actual version of the
- database, then mark <var title="">the statement</var> as
- bogus. (<a href=#dom-sqlerror-code-2 title=dom-sqlerror-code-2>Error code
- 2</a>.)</li>
-
- <li>
-
- <p>Otherwise, if the syntax of <var title="">sqlStatement</var> is
- not valid (except for the use of <code title="">?</code>
- characters in the place of literals), or the statement uses
- features that are not supported (e.g. due to security reasons), or
- the number of items in the <var title="">arguments</var> array is
- not equal to the number of <code title="">?</code> placeholders in
- the statement, or the statement cannot be parsed for some other
- reason, then mark <var title="">the statement</var> as
- bogus. (<a href=#dom-sqlerror-code-5 title=dom-sqlerror-code-5>Error code
- 5</a>.)</p>
-
- <p>User agents must consider statements that use the <code title="">BEGIN</code>, <code title="">COMMIT</code>, and <code title="">ROLLBACK</code> SQL features as being unsupported (and thus
- will mark them as bogus), so as to not let these statements
- interfere with the explicit transactions managed by the database API
- itself.</p>
-
- </li>
-
- <li id=modifications-fail-if-read-only>
-
- <p>Otherwise, if the <i>mode</i> that was used to create the
- <code><a href=#sqltransaction>SQLTransaction</a></code> or <code><a href=#sqltransactionsync>SQLTransactionSync</a></code>
- object is read-only but the statement's main verb can modify the
- database, mark the statement as bogus. (<a href=#dom-sqlerror-code-5 title=dom-sqlerror-code-5>Error code 5</a>.)</p>
-
- <p class=note>Only the statement's main verb (e.g. <code title="">UPDATE</code>, <code title="">SELECT</code>, <code title="">DROP</code>) is considered here. Thus, a statement like
- "<code title="">UPDATE test SET id=0 WHERE 0=1</code>" would be
- treated as potentially modifying the database for the purposes
- of this step, even though it could never in fact have any
- side-effects.</p>
-
- </li>
-
- <li><p>Return <var title="">the statement</var>.</li>
-
- </ol><p>The user agent must act as if the database was hosted in an
- otherwise completely empty environment with no resources. For
- example, attempts to read from or write to the file system will
- fail.</p>
-
- <p class=note>A future version of this specification will probably
- define the exact SQL subset required in more detail.</p>
-
-
-
- <h5 id=asynchronous-database-api><span class=secno>7.2.2.3 </span>Asynchronous database API</h5>
-
- <pre class=idl>interface <dfn id=database>Database</dfn> {
- void <a href=#dom-database-transaction title=dom-database-transaction>transaction</a>(in <a href=#sqltransactioncallback>SQLTransactionCallback</a> callback, in optional <a href=#sqltransactionerrorcallback>SQLTransactionErrorCallback</a> errorCallback, in optional <a href=#sqlvoidcallback>SQLVoidCallback</a> successCallback);
- void <a href=#dom-database-readtransaction title=dom-database-readTransaction>readTransaction</a>(in <a href=#sqltransactioncallback>SQLTransactionCallback</a> callback, in optional <a href=#sqltransactionerrorcallback>SQLTransactionErrorCallback</a> errorCallback, in optional <a href=#sqlvoidcallback>SQLVoidCallback</a> successCallback);
-
- readonly attribute DOMString <a href=#dom-database-version title=dom-database-version>version</a>;
- void <a href=#dom-database-changeversion title=dom-database-changeVersion>changeVersion</a>(in DOMString oldVersion, in DOMString newVersion, in optional <a href=#sqltransactioncallback>SQLTransactionCallback</a> callback, in optional <a href=#sqltransactionerrorcallback>SQLTransactionErrorCallback</a> errorCallback, in optional <a href=#sqlvoidcallback>SQLVoidCallback</a> successCallback);
-};
-
-[Callback=FunctionOnly, NoInterfaceObject]
-interface <dfn id=sqlvoidcallback>SQLVoidCallback</dfn> {
- void <span title=dom-sqlvoidcallback-handleEvent>handleEvent</span>();
-};
-
-[Callback=FunctionOnly, NoInterfaceObject]
-interface <dfn id=sqltransactioncallback>SQLTransactionCallback</dfn> {
- void <span title=dom-sqltransactioncallback-handleEvent>handleEvent</span>(in <a href=#sqltransaction>SQLTransaction</a> transaction);
-};
-
-[Callback=FunctionOnly, NoInterfaceObject]
-interface <dfn id=sqltransactionerrorcallback>SQLTransactionErrorCallback</dfn> {
- void <span title=dom-sqltransactionerrorcallback-handleEvent>handleEvent</span>(in <a href=#sqlerror>SQLError</a> error);
-};</pre>
-
- <p>The <dfn id=dom-database-transaction title=dom-database-transaction><code>transaction()</code></dfn>
- and <dfn id=dom-database-readtransaction title=dom-database-readTransaction><code>readTransaction()</code></dfn>
- methods takes one to three arguments. When called, these methods must
- immediately return and then asynchronously run the <a href=#transaction-steps>transaction
- steps</a> with the <i>transaction callback</i> being the first
- argument, the <i>error callback</i> being the second argument, if
- any, the <i>success callback</i> being the third argument, if any,
- and with no <i>preflight operation</i> or <i>postflight
- operation</i>.</p>
-
- <p>For the <code title=dom-database-transaction><a href=#dom-database-transaction>transaction()</a></code> method, the
- <i>mode</i> must be read/write. For the <code title=dom-database-readTransaction><a href=#dom-database-readtransaction>readTransaction()</a></code>
- method, the <i>mode</i> must be read-only.</p>
-
- <p>On getting, the <dfn id=dom-database-version title=dom-database-version><code>version</code></dfn> attribute
- must return the current version of the database (as opposed to the
- <a href=#concept-database-expected-version title=concept-database-expected-version>expected
- version</a> of the <code><a href=#database>Database</a></code> object).</p>
-
- <p>The <dfn id=dom-database-changeversion title=dom-database-changeVersion><code>changeVersion()</code></dfn>
- method allows scripts to atomically verify the version number and
- change it at the same time as doing a schema update. When the method
- is invoked, it must immediately return, and then asynchronously run
- the <a href=#transaction-steps>transaction steps</a> with the <i>transaction
- callback</i> being the third argument, the <i>error callback</i>
- being the fourth argument, the <i>success callback</i> being the
- fifth argument, the <i>preflight operation</i> being the
- following:</p>
-
- <ol><li><p>Check that the value of the first argument to the <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code> method
- exactly matches the database's actual version. If it does not, then
- the <i>preflight operation</i> fails.</li>
-
- </ol><p>...the <i>postflight operation</i> being the following:</p>
-
- <ol><li>Change the database's actual version to the value of the second
- argument to the <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>
- method.</li>
-
- <li>Change the <code><a href=#database>Database</a></code> object's expected version to
- the value of the second argument to the <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>
- method.</li>
-
- </ol><p>...and the <i>mode</i> being read/write.</p>
-
- <p>If any of the optional arguments are omitted, then they must be
- treated as if they were null.</p>
-
-
- <h6 id=executing-sql-statements><span class=secno>7.2.2.3.1 </span>Executing SQL statements</h6>
-
- <p>The <code title=dom-database-transaction><a href=#dom-database-transaction>transaction()</a></code>,
- <code title=dom-database-readTransaction><a href=#dom-database-readtransaction>readTransaction()</a></code>,
- and <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>
- methods invoke callbacks with <code><a href=#sqltransaction>SQLTransaction</a></code>
- objects.</p>
-
- <pre class=idl>typedef sequence<any> <dfn id=objectarray>ObjectArray</dfn>;
-
-interface <dfn id=sqltransaction>SQLTransaction</dfn> {
- void <a href=#dom-sqltransaction-executesql title=dom-sqltransaction-executeSql>executeSql</a>(in DOMString sqlStatement, in optional <a href=#objectarray>ObjectArray</a> arguments, in optional <a href=#sqlstatementcallback>SQLStatementCallback</a> callback, in optional <a href=#sqlstatementerrorcallback>SQLStatementErrorCallback</a> errorCallback);
-};
-
-[Callback=FunctionOnly, NoInterfaceObject]
-interface <dfn id=sqlstatementcallback>SQLStatementCallback</dfn> {
- void <span title=dom-sqlstatementcallback-handleEvent>handleEvent</span>(in <a href=#sqltransaction>SQLTransaction</a> transaction, in <a href=#sqlresultset>SQLResultSet</a> resultSet);
-};
-
-[Callback=FunctionOnly, NoInterfaceObject]
-interface <dfn id=sqlstatementerrorcallback>SQLStatementErrorCallback</dfn> {
- boolean <span title=dom-sqlstatementerrorcallback-handleEvent>handleEvent</span>(in <a href=#sqltransaction>SQLTransaction</a> transaction, in <a href=#sqlerror>SQLError</a> error);
-};</pre>
-
- <p>When the <dfn id=dom-sqltransaction-executesql title=dom-sqltransaction-executeSql><code>executeSql(<var title="">sqlStatement</var>, <var title="">arguments</var>, <var title="">callback</var>, <var title="">errorCallback</var>)</code></dfn> method is invoked, the
- user agent must run the following algorithm. (This algorithm is
- relatively simple in that it doesn't actually execute any SQL
- — the bulk of the work is actually done as part of the
- <a href=#transaction-steps>transaction steps</a>.)</p>
-
- <ol><li><p>If the method was not invoked during the execution of a
- <code><a href=#sqltransactioncallback>SQLTransactionCallback</a></code>,
- <code><a href=#sqlstatementcallback>SQLStatementCallback</a></code>, or
- <code><a href=#sqlstatementerrorcallback>SQLStatementErrorCallback</a></code> then raise an
- <code><a href=#invalid_state_err>INVALID_STATE_ERR</a></code> exception. (Calls from inside a
- <code><a href=#sqltransactionerrorcallback>SQLTransactionErrorCallback</a></code> thus raise an
- exception. The <code><a href=#sqltransactionerrorcallback>SQLTransactionErrorCallback</a></code> handler is
- only called once a transaction has failed, and no SQL statements
- can be added to a failed transaction.)</li>
-
- <li>
-
- <p><a href=#preprocess-the-sql-statement>Preprocess the SQL statement</a> given as the first
- argument to the method (<var title="">sqlStatement</var>), using
- the second argument to the method as the <var title="">arguments</var> array, to obtain <var title="">the
- statement</var>.</p>
-
- <p>If the second argument is omitted or null, then treat the <var title="">arguments</var> array as empty.</p>
-
- </li>
-
- <li><p>Queue up <var title="">the statement</var> in the
- transaction, along with the third argument (if any) as the
- statement's result set callback and the fourth argument (if any) as
- the error callback.</li>
-
- </ol><h6 id=processing-model-3><span class=secno>7.2.2.3.2 </span>Processing model</h6>
-
- <p>The <dfn id=transaction-steps>transaction steps</dfn> are as follows. These steps must
- be run asynchronously. These steps are invoked with a <i>transaction
- callback</i>, optionally an <i>error callback</i>, optionally a
- <i>success callback</i>, optionally a <i>preflight operation</i>,
- optionally a <i>postflight operation</i>, and with a <i>mode</i>
- that is either read/write or read-only.</p>
-
- <ol><li><p>Open a new SQL transaction to the database, and create a
- <code><a href=#sqltransaction>SQLTransaction</a></code> object that represents that
- transaction. If the <i>mode</i> is read/write, the transaction must
- have an exclusive write lock over the entire database. If the
- <i>mode</i> is read-only, the transaction must have a shared read
- lock over the entire database. The user agent should wait for an
- appropriate lock to be available.</li>
-
- <li><p>If an error occurred in the opening of the transaction
- (e.g. if the user agent failed to obtain an appropriate lock after
- an appropriate delay), jump to the last step.</li>
-
- <li><p>If a <i>preflight operation</i> was defined for this
- instance of the transaction steps, run that. If it fails, then jump
- to the last step. (This is basically a hook for the <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>
- method.)</li>
-
- <li><p>If the <i>transaction callback</i> is not null, <a href=#queue-a-task>queue
- a task</a> to invoke the <i>transaction callback</i> with the
- aforementioned <code><a href=#sqltransaction>SQLTransaction</a></code> object as its only
- argument, and wait for that task to be run.</li>
-
- <li><p>If the callback raised an exception, jump to the last
- step.</li>
-
- <li><p>While there are any statements queued up in the transaction,
- perform the following steps for each queued up statement in the
- transaction, oldest first. Each statement has a statement,
- optionally a result set callback, and optionally an error
- callback.</p>
-
- <ol><li><p>If the statement is marked as bogus, jump to the "in case
- of error" steps below.</li>
-
- <li><p>Execute the statement in the context of the transaction.
- <a href=#refsSQL>[SQL]</a></p>
-
- <li><p>If the statement failed, jump to the "in case of error"
- steps below.</li>
-
- <li><p>Create a <code><a href=#sqlresultset>SQLResultSet</a></code> object that represents
- the result of the statement.</li>
-
- <li><p>If the statement has a result set callback that is not
- null, <a href=#queue-a-task>queue a task</a> to invoke it with the
- <code><a href=#sqltransaction>SQLTransaction</a></code> object as its first argument and the
- new <code><a href=#sqlresultset>SQLResultSet</a></code> object as its second argument, and
- wait for that task to be run.</li>
-
- <li><p>If the callback was invoked and raised an exception, jump
- to the last step in the overall steps.</li>
-
- <li><p>Move on to the next statement, if any, or onto the next
- overall step otherwise.</li>
-
- </ol><p>In case of error (or more specifically, if the above substeps
- say to jump to the "in case of error" steps), run the following
- substeps:</p>
-
- <ol><li><p>If the statement had an associated error callback that is
- not null, then <a href=#queue-a-task>queue a task</a> to invoke that error
- callback with the <code><a href=#sqltransaction>SQLTransaction</a></code> object and a newly
- constructed <code><a href=#sqlerror>SQLError</a></code> object that represents the
- error that caused these substeps to be run as the two arguments,
- respectively, and wait for the task to be run.</li>
-
- <li><p>If the error callback returns false, then move on to the
- next statement, if any, or onto the next overall step
- otherwise.</li>
-
- <li><p>Otherwise, the error callback did not return false, or
- there was no error callback. Jump to the last step in the overall
- steps.</li>
-
- </ol></li>
-
- <li>
-
- <p>If a <i>postflight operation</i> was defined for this instance
- of the transaction steps, then: as one atomic operation, commit
- the transaction and run the <i>postflight operation</i>. If either
- fails, then do neither, and instead jump to the last step. (This
- is basically a hook for the <code title=dom-database-changeVersion><a href=#dom-database-changeversion>changeVersion()</a></code>
- method.)</p>
-
- <p>Otherwise: commit the transaction and run the <i>postflight
- operation</i>. If an error occurred in the committing of the
- transaction, jump to the last step.</p>
-
- </li>
-
- <li><p><a href=#queue-a-task>Queue a task</a> to invoke the <i>success
- callback</i>, if it is not null.</li>
-
- <li><p>End these steps. The next step is only used when something
- goes wrong.</li>
-
- <li><p><a href=#queue-a-task>Queue a task</a> to invoke the <i>error
- callback</i>, if it is not null, with a newly constructed
- <code><a href=#sqlerror>SQLError</a></code> object that represents the last error to have
- occurred in this transaction. Rollback the transaction. Any
- still-pending statements in the transaction are discarded.</li>
-
- </ol><p>The <a href=#task-source>task source</a> for these <a href=#concept-task title=concept-task>tasks</a> is the <dfn id=database-access-task-source>database access task
- source</dfn>.</p>
-
-
-
- <h5 id=synchronous-database-api><span class=secno>7.2.2.4 </span>Synchronous database API</h5>
-
- <pre class=idl>interface <dfn id=databasesync>DatabaseSync</dfn> {
- void <a href=#dom-database-sync-transaction title=dom-database-sync-transaction>transaction</a>(in <a href=#sqltransactionsynccallback>SQLTransactionSyncCallback</a> callback);
- void <a href=#dom-database-sync-readtransaction title=dom-database-sync-readTransaction>readTransaction</a>(in <a href=#sqltransactionsynccallback>SQLTransactionSyncCallback</a> callback);
-
- readonly attribute DOMString <a href=#dom-database-sync-version title=dom-database-sync-version>version</a>;
- void <a href=#dom-database-sync-changeversion title=dom-database-sync-changeVersion>changeVersion</a>(in DOMString oldVersion, in DOMString newVersion, in optional <a href=#sqltransactionsynccallback>SQLTransactionSyncCallback</a> callback);
-};
-
-[Callback=FunctionOnly, NoInterfaceObject]
-interface <dfn id=sqltransactionsynccallback>SQLTransactionSyncCallback</dfn> {
- void <span title=dom-sqltransactionsynccallback-handleEvent>handleEvent</span>(in <a href=#sqltransactionsync>SQLTransactionSync</a> transaction);
-};</pre>
-
- <p>The <dfn id=dom-database-sync-transaction title=dom-database-sync-transaction><code>transaction()</code></dfn>
- and <dfn id=dom-database-sync-readtransaction title=dom-database-sync-readTransaction><code>readTransaction()</code></dfn>
- methods must run the following steps:</p>
-
- <ol><li><p>If the method was the <code title=dom-database-sync-transaction><a href=#dom-database-sync-transaction>transaction()</a></code> method,
- <a href=#create-a-sqltransactionsync-object>create a <code>SQLTransactionSync</code> object</a> for a
- read/write transaction. Otherwise, <a href=#create-a-sqltransactionsync-object>create a
- <code>SQLTransactionSync</code> object</a> for a read-only
- transaction. In either case, if this throws an exception, then
- rethrow it and abort these steps. Otherwise, let <var title="">transaction</var> be the newly created
- <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> object.</li>
-
- <li><p>If the first argument is null, rollback the transaction,
- throw a <code><a href=#sqlexception>SQLException</a></code> exception, and abort these
- steps. (<a href=#dom-sqlerror-code-0 title=dom-sqlerror-code-0>Error code
- 0</a>.)</li>
-
- <li><p>Invoke the callback given by the first argument, passing it
- the <var title="">transaction</var> object as its only
- argument.</li>
-
- <li><p>Mark the <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> object as <i title="">stale</i>.</p>
-
- <li><p>If the callback was terminated by an exception, then
- rollback the transaction, rethrow that exception, and abort these
- steps.</li>
-
- <li><p>Commit the transaction.</li>
-
- <li><p>If an error occurred in the committing of the transaction,
- rollback the transaction, throw a <code><a href=#sqlexception>SQLException</a></code>
- exception, and abort these steps.</li>
-
- </ol><p>On getting, the <dfn id=dom-database-sync-version title=dom-database-sync-version><code>version</code></dfn>
- attribute must return the current version of the database (as
- opposed to the <a href=#concept-database-expected-version title=concept-database-expected-version>expected version</a> of
- the <code><a href=#databasesync>DatabaseSync</a></code> object).</p>
-
- <p>The <dfn id=dom-database-sync-changeversion title=dom-database-sync-changeVersion><code>changeVersion()</code></dfn>
- method allows scripts to atomically verify the version number and
- change it at the same time as doing a schema update. When the method
- is invoked, it must run the following steps:</p>
-
- <ol><li><p><a href=#create-a-sqltransactionsync-object>Create a <code>SQLTransactionSync</code> object</a>
- for a read/write transaction. If this throws an exception, then
- rethrow it and abort these steps. Otherwise, let <var title="">transaction</var> be the newly created
- <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> object.</li>
-
- <li><p>Check that the value of the first argument to the <code title=dom-database-sync-changeVersion><a href=#dom-database-sync-changeversion>changeVersion()</a></code>
- method exactly matches the database's actual version. If it does
- not, then throw a <code><a href=#sqlexception>SQLException</a></code> exception and abort
- these steps. (<a href=#dom-sqlerror-code-2 title=dom-sqlerror-code-2>Error code
- 2</a>.)</li>
-
- <li><p>If the third argument is not null, invoke the callback given
- by the third argument, passing it the <var title="">transaction</var> object as its only argument.</li>
-
- <li><p>Mark the <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> object as <i title="">stale</i>.</p>
-
- <li><p>If the callback was terminated by an exception, then
- rollback the transaction, rethrow the exception, and abort these
- steps.</li>
-
- <li><p>Commit the transaction.</li>
-
- <li><p>If an error occurred in the committing of the transaction,
- rollback the transaction, throw a <code><a href=#sqlexception>SQLException</a></code>
- exception, and abort these steps.</li>
-
- <li>Change the database's actual version to the value of the second
- argument to the <code title=dom-database-sync-changeVersion><a href=#dom-database-sync-changeversion>changeVersion()</a></code>
- method.</li>
-
- <li>Change the <code><a href=#database>Database</a></code> object's expected version to
- the value of the second argument to the <code title=dom-database-sync-changeVersion><a href=#dom-database-sync-changeversion>changeVersion()</a></code>
- method.</li>
-
- </ol><hr><p>When the user agent is to <dfn id=create-a-sqltransactionsync-object>create a
- <code>SQLTransactionSync</code> object</dfn> for a transaction that
- is either read/write or read-only, it must run the following
- steps:</p>
-
- <ol><li><p>Open a new SQL transaction to the database, and create a
- <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> object that represents that
- transaction. If the <i>mode</i> is read/write, the transaction must
- have an exclusive write lock over the entire database. If the
- <i>mode</i> is read-only, the transaction must have a shared read
- lock over the entire database. The user agent should wait for an
- appropriate lock to be available.</li>
-
- <li><p>If an error occurred in the opening of the transaction
- (e.g. if the user agent failed to obtain an appropriate lock after
- an appropriate delay), throw a <code><a href=#sqlexception>SQLException</a></code> exception
- and abort these steps.</li>
-
- <li><p>Return the newly created <code><a href=#sqltransactionsync>SQLTransactionSync</a></code>
- object.</li>
-
- </ol><h6 id=executing-sql-statements-0><span class=secno>7.2.2.4.1 </span>Executing SQL statements</h6>
-
- <p>The <code title=dom-database-sync-transaction><a href=#dom-database-sync-transaction>transaction()</a></code>, <code title=dom-database-sync-readTransaction><a href=#dom-database-sync-readtransaction>readTransaction()</a></code>,
- and <code title=dom-database-sync-changeVersion><a href=#dom-database-sync-changeversion>changeVersion()</a></code>
- methods invoke callbacks that are passed
- <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> objects.</p>
-
- <pre class=idl>// typedef sequence<any> <a href=#objectarray>ObjectArray</a>;
-
-interface <dfn id=sqltransactionsync>SQLTransactionSync</dfn> {
- <a href=#sqlresultset>SQLResultSet</a> <a href=#dom-sqltransaction-sync-executesql title=dom-sqltransaction-sync-executeSql>executeSql</a>(in DOMString sqlStatement, in optional <a href=#objectarray>ObjectArray</a> arguments);
-};</pre>
-
- <p>A <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> object is initially <i title="">fresh</i>, but it will be marked as <i title="">stale</i>
- once it has been committed or rolled back.</p>
-
- <p>When the <dfn id=dom-sqltransaction-sync-executesql title=dom-sqltransaction-sync-executeSql><code>executeSql(<var title="">sqlStatement</var>, <var title="">arguments</var>)</code></dfn> method is invoked, the user
- agent must run the following algorithm:</p>
-
- <ol><li><p>If the <code><a href=#sqltransactionsync>SQLTransactionSync</a></code> object is <i title="">stale</i>, then throw an <code><a href=#invalid_state_err>INVALID_STATE_ERR</a></code>
- exception.</li>
-
- <li>
-
- <p><a href=#preprocess-the-sql-statement>Preprocess the SQL statement</a> given as the first
- argument to the method (<var title="">sqlStatement</var>), using
- the second argument to the method as the <var title="">arguments</var> array, to obtain <var title="">the
- statement</var>.</p>
-
- <p>If the second argument is omitted or null, then treat the <var title="">arguments</var> array as empty.</p>
-
- </li>
-
- <li><p>If the statement is marked as bogus, throw a
- <code><a href=#sqlexception>SQLException</a></code> exception.</li>
-
- <li><p>Execute the statement in the context of the transaction.
- <a href=#refsSQL>[SQL]</a></p>
-
- <li><p>If the statement failed, throw a <code><a href=#sqlexception>SQLException</a></code>
- exception.</li>
-
- <li><p>Create a <code><a href=#sqlresultset>SQLResultSet</a></code> object that represents
- the result of the statement.</li>
-
- <li><p>Return the newly created <code><a href=#sqlresultset>SQLResultSet</a></code>
- object.</li>
-
- </ol><h5 id=database-query-results><span class=secno>7.2.2.5 </span>Database query results</h5>
-
- <p>The <code title=dom-sqltransaction-executeSql><a href=#dom-sqltransaction-executesql>executeSql()</a></code>
- method invokes its callback with a <code><a href=#sqlresultset>SQLResultSet</a></code> object
- as an argument.</p>
-
- <pre class=idl>interface <dfn id=sqlresultset>SQLResultSet</dfn> {
- readonly attribute long <a href=#dom-sqlresultset-insertid title=dom-SQLResultSet-insertId>insertId</a>;
- readonly attribute long <a href=#dom-sqlresultset-rowsaffected title=dom-SQLResultSet-rowsAffected>rowsAffected</a>;
- readonly attribute <a href=#sqlresultsetrowlist>SQLResultSetRowList</a> <a href=#dom-sqlresultset-rows title=dom-SQLResultSet-rows>rows</a>;
-};</pre>
-
- <p>The <dfn id=dom-sqlresultset-insertid title=dom-SQLResultSet-insertId><code>insertId</code></dfn>
- attribute must return the row ID of the row that the
- <code><a href=#sqlresultset>SQLResultSet</a></code> object's SQL statement inserted into the
- database, if the statement inserted a row. If the statement inserted
- multiple rows, the ID of the last row must be the one returned. If
- the statement did not insert a row, then the attribute must instead
- raise an <code><a href=#invalid_access_err>INVALID_ACCESS_ERR</a></code> exception.</p>
-
- <p>The <dfn id=dom-sqlresultset-rowsaffected title=dom-SQLResultSet-rowsAffected><code>rowsAffected</code></dfn>
- attribute must return the number of rows that were changed by the
- SQL statement. If the statement did not affected any rows, then the
- attribute must return zero. For "SELECT" statements, this returns
- zero (querying the database doesn't affect any rows).</p>
-
- <p>The <dfn id=dom-sqlresultset-rows title=dom-SQLResultSet-rows><code>rows</code></dfn>
- attribute must return a <code><a href=#sqlresultsetrowlist>SQLResultSetRowList</a></code>
- representing the rows returned, in the order returned by the
- database. If no rows were returned, then the object will be empty
- (its <code title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></code> will
- be zero).</p>
-
- <pre class=idl>interface <dfn id=sqlresultsetrowlist>SQLResultSetRowList</dfn> {
- readonly attribute unsigned long <a href=#dom-sqlresultsetrowlist-length title=dom-SQLResultSetRowList-length>length</a>;
- getter <span>any</span> <a href=#dom-sqlresultsetrowlist-item title=dom-SQLResultSetRowList-item>item</a>(in unsigned long index);
-};</pre>
-
- <p class=note>Implementors are encouraged to implement
- <code><a href=#sqlresultsetrowlist>SQLResultSetRowList</a></code> objects lazily, or at least
- asynchronously, for better performance.</p>
-
- <p><code><a href=#sqlresultsetrowlist>SQLResultSetRowList</a></code> objects have a <dfn id=dom-sqlresultsetrowlist-length title=dom-SQLResultSetRowList-length><code>length</code></dfn>
- attribute that must return the number of rows it represents (the
- number of rows returned by the database). This is the <var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var>.</p>
-
- <p class=note>Fetching the <code title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></code> might be
- expensive, and authors are thus encouraged to avoid using it (or
- enumerating over the object, which implicitly uses it) where
- possible.</p>
-
- <p>The object's <span>indices of the supported indexed
- properties</span> are the numbers in the range zero to <span title=""><var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var>-1</span>, unless
- the <var title=dom-SQLResultSetRowList-length><a href=#dom-sqlresultsetrowlist-length>length</a></var> is
- zero, in which case there are no <span>supported indexed
- properties</span>.</p>
-
- <p>The <dfn id=dom-sqlresultsetrowlist-item title=dom-SQLResultSetRowList-item><code>item(<var title="">index</var>)</code></dfn> attribute must return the row
- with the given index <var title="">index</var>. If there is no such
- row, then the method must return null.</p>
-
- <p>Each row must be represented by a native ordered dictionary data
- type. In the JavaScript binding, this must be <code><a href=#the-object-element>Object</a></code>.
- Each row object must have one property (or dictionary entry) per
- column, with those properties enumerating in the order that these
- columns were returned by the database. Each property must have the
- name of the column and the value of the cell, as they were returned
- by the database.</p>
-
-
- <h5 id=errors-and-exceptions><span class=secno>7.2.2.6 </span>Errors and exceptions</h5>
-
- <p>Errors in the asynchronous database API are reported using
- callbacks that have a <code><a href=#sqlerror>SQLError</a></code> object as one of their
- arguments.</p>
-
- <pre class=idl>interface <dfn id=sqlerror>SQLError</dfn> {
- const unsigned short <a href=#dom-sqlexception-code-unknown title=dom-SQLException-code-UNKNOWN>UNKNOWN_ERR</a> = 0;
- const unsigned short <a href=#dom-sqlexception-code-database title=dom-SQLException-code-DATABASE>DATABASE_ERR</a> = 1;
- const unsigned short <a href=#dom-sqlexception-code-version title=dom-SQLException-code-VERSION>VERSION_ERR</a> = 2;
- const unsigned short <a href=#dom-sqlexception-code-too_large title=dom-SQLException-code-TOO_LARGE>TOO_LARGE_ERR</a> = 3;
- const unsigned short <a href=#dom-sqlexception-code-quota title=dom-SQLException-code-QUOTA>QUOTA_ERR</a> = 4;
- const unsigned short <a href=#dom-sqlexception-code-syntax title=dom-SQLException-code-SYNTAX>SYNTAX_ERR</a> = 5;
- const unsigned short <a href=#dom-sqlexception-code-constraint title=dom-SQLException-code-CONSTRAINT>CONSTRAINT_ERR</a> = 6;
- const unsigned short <a href=#dom-sqlexception-code-timeout title=dom-SQLException-code-TIMEOUT>TIMEOUT_ERR</a> = 7;
- readonly attribute unsigned short <a href=#dom-sqlerror-code title=dom-SQLError-code>code</a>;
- readonly attribute DOMString <a href=#dom-sqlerror-message title=dom-SQLError-message>message</a>;
-};</pre>
-
- <p>The <dfn id=dom-sqlerror-code title=dom-SQLError-code><code>code</code></dfn> IDL
- attribute must return the most appropriate code from the table
- below.</p>
-
- <p>The <dfn id=dom-sqlerror-message title=dom-SQLError-message><code>message</code></dfn>
- IDL attribute must return an error message describing the error
- encountered. The message should be localized to the user's
- language.</p>
-
- <hr><p>Errors in the synchronous database API are reported using
- <code><a href=#sqlexception>SQLException</a></code> exceptions:</p>
-
- <pre class=idl>exception <dfn id=sqlexception>SQLException</dfn> {
- const unsigned short <a href=#dom-sqlexception-code-unknown title=dom-SQLException-code-UNKNOWN>UNKNOWN_ERR</a> = 0;
- const unsigned short <a href=#dom-sqlexception-code-database title=dom-SQLException-code-DATABASE>DATABASE_ERR</a> = 1;
- const unsigned short <a href=#dom-sqlexception-code-version title=dom-SQLException-code-VERSION>VERSION_ERR</a> = 2;
- const unsigned short <a href=#dom-sqlexception-code-too_large title=dom-SQLException-code-TOO_LARGE>TOO_LARGE_ERR</a> = 3;
- const unsigned short <a href=#dom-sqlexception-code-quota title=dom-SQLException-code-QUOTA>QUOTA_ERR</a> = 4;
- const unsigned short <a href=#dom-sqlexception-code-syntax title=dom-SQLException-code-SYNTAX>SYNTAX_ERR</a> = 5;
- const unsigned short <a href=#dom-sqlexception-code-constraint title=dom-SQLException-code-CONSTRAINT>CONSTRAINT_ERR</a> = 6;
- const unsigned short <a href=#dom-sqlexception-code-timeout title=dom-SQLException-code-TIMEOUT>TIMEOUT_ERR</a> = 7;
- unsigned short <a href=#dom-sqlexception-code title=dom-SQLException-code>code</a>;
- DOMString <a href=#dom-sqlexception-message title=dom-SQLException-message>message</a>;
-};</pre>
-
- <p>The <dfn id=dom-sqlexception-code title=dom-SQLException-code><code>code</code></dfn>
- IDL attribute must return the most appropriate code from the table
- below.</p>
-
- <p>The <dfn id=dom-sqlexception-message title=dom-SQLException-message><code>message</code></dfn> IDL
- attribute must return an error message describing the error
- encountered. The message should be localized to the user's
- language.</p>
-
- <hr><p>The error codes are as follows:</p>
-
- <table><thead><tr><th>Constant
- <th>Code
- <th>Situation
- <tbody><tr><td><dfn id=dom-sqlexception-code-unknown title=dom-SQLException-code-UNKNOWN><code>UNKNOWN_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-0 title=dom-sqlerror-code-0>0</dfn>
- <td>The transaction failed for reasons unrelated to the database
- itself and not covered by any other error code.
-
- <tr><td><dfn id=dom-sqlexception-code-database title=dom-SQLException-code-DATABASE><code>DATABASE_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-1 title=dom-sqlerror-code-1>1</dfn>
- <td>The statement failed for database reasons not covered by any
- other error code.
-
- <tr><td><dfn id=dom-sqlexception-code-version title=dom-SQLException-code-VERSION><code>VERSION_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-2 title=dom-sqlerror-code-2>2</dfn>
- <td>The operation failed because the actual database version was
- not what it should be. For example, a statement found that the
- actual database version no longer matched the <a href=#concept-database-expected-version title=concept-database-expected-version>expected version</a>
- of the <code><a href=#database>Database</a></code> or <code><a href=#databasesync>DatabaseSync</a></code> object,
- or the <code title=dom-database-changeversion><a href=#dom-database-changeversion>Database.changeVersion()</a></code>
- or <code title=dom-database-sync-changeversion><a href=#dom-database-sync-changeversion>DatabaseSync.changeVersion()</a></code>
- methods were passed a version that doesn't match the actual
- database version.
-
- <tr><td><dfn id=dom-sqlexception-code-too_large title=dom-SQLException-code-TOO_LARGE><code>TOO_LARGE_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-3 title=dom-sqlerror-code-3>3</dfn>
- <td>The statement failed because the data returned from the
- database was too large. The SQL "LIMIT" modifier might be useful
- to reduce the size of the result set.
-
- <tr><td><dfn id=dom-sqlexception-code-quota title=dom-SQLException-code-QUOTA><code>QUOTA_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-4 title=dom-sqlerror-code-4>4</dfn>
- <td>The statement failed because there was not enough remaining
- storage space, or the storage quota was reached and the user
- declined to give more space to the database.
-
- <tr><td><dfn id=dom-sqlexception-code-syntax title=dom-SQLException-code-SYNTAX><code>SYNTAX_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-5 title=dom-sqlerror-code-5>5</dfn>
- <td>The statement failed because of a syntax error, or the number
- of arguments did not match the number of <code title="">?</code>
- placeholders in the statement, or the statement tried to use a
- statement that is not allowed, such as <code title="">BEGIN</code>, <code title="">COMMIT</code>, or <code title="">ROLLBACK</code>, or the statement tried to use a verb
- that could modify the database but the transaction was read-only.
-
- <tr><td><dfn id=dom-sqlexception-code-constraint title=dom-SQLException-code-CONSTRAINT><code>CONSTRAINT_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-6 title=dom-sqlerror-code-6>6</dfn>
- <td>An <code title="">INSERT</code>, <code title="">UPDATE</code>, or <code title="">REPLACE</code>
- statement failed due to a constraint failure. For example,
- because a row was being inserted and the value given for the
- primary key column duplicated the value of an existing row.
-
- <tr><td><dfn id=dom-sqlexception-code-timeout title=dom-SQLException-code-TIMEOUT><code>TIMEOUT_ERR</code></dfn>
- <td><dfn id=dom-sqlerror-code-7 title=dom-sqlerror-code-7>7</dfn>
- <td>A lock for the transaction could not be obtained in a
- reasonable time.
-
- </table><h4 id=web-sql><span class=secno>7.2.3 </span>Web SQL</h4>
-
- <p class=XXX>Need to define the SQL dialect.</p>
-
- <h3 id=common-concerns><span class=secno>7.3 </span>Common concerns</h3>
+ <h3 id=disk-space><span class=secno>7.3 </span>Disk space</h3>
+ <p>User agents should limit the total amount of space allowed for
+ storage areas.
-
- <h4 id=disk-space><span class=secno>7.3.1 </span>Disk space</h4>
-
- <p>User agents should limit the total amount of space allowed for
- these storage features.
</p>
@@ -59264,9 +58323,9 @@
future.</p>
- <h4 id=privacy><span class=secno>7.3.2 </span>Privacy</h4>
+ <h3 id=privacy><span class=secno>7.4 </span>Privacy</h3>
- <h5 id=user-tracking><span class=secno>7.3.2.1 </span>User tracking</h5>
+ <h4 id=user-tracking><span class=secno>7.4.1 </span>User tracking</h4>
<p>A third-party advertiser (or any entity capable of getting
content distributed to multiple sites) could use a unique identifier
@@ -59274,10 +58333,7 @@
local storage area
- or its
- client-side databases
-
to track a user across multiple sessions, building a profile of the
user's interests to allow for highly targeted advertising. In
conjunction with a site that is aware of the user's real identity
@@ -59296,10 +58352,7 @@
the <code title=dom-localStorage><a href=#dom-localstorage>localStorage</a></code> objects
- and
- the database objects
-
to scripts originating at the domain of the top-level document of
the <a href=#browsing-context>browsing context</a>, for instance denying access to
the API for pages from other domains running in
@@ -59342,9 +58395,11 @@
<p>If users attempt to protect their privacy by clearing cookies
without also clearing data stored in the
- local storage area and relevant databases,
+ local storage area,
+
+
sites can defeat those attempts by using the two features as
redundant backup for each other. User agents should present the
interfaces for clearing these in a way that helps users to
@@ -59357,10 +58412,7 @@
local storage areas
- and
- databases
-
</dt>
<dd>
@@ -59370,9 +58422,6 @@
to local storage areas.</p>
- <p>User agents may require the user to authorize access to
- databases before a site can use the feature.</p>
-
</dd>
@@ -59422,7 +58471,7 @@
separate sessions into coherent user profiles.</p>
- <h5 id=sensitivity-of-data><span class=secno>7.3.2.2 </span>Sensitivity of data</h5>
+ <h4 id=sensitivity-of-data><span class=secno>7.4.2 </span>Sensitivity of data</h4>
<p>User agents should treat persistently stored data as potentially
sensitive; it's quite possible for e-mails, calendar appointments,
@@ -59433,28 +58482,32 @@
it is promptly deleted from the underlying storage.</p>
- <h4 id=security-4><span class=secno>7.3.3 </span>Security</h4>
+ <h3 id=security-4><span class=secno>7.5 </span>Security</h3>
- <h5 id=dns-spoofing-attacks><span class=secno>7.3.3.1 </span>DNS spoofing attacks</h5>
+ <h4 id=dns-spoofing-attacks><span class=secno>7.5.1 </span>DNS spoofing attacks</h4>
<p>Because of the potential for DNS spoofing attacks, one cannot
guarantee that a host claiming to be in a certain domain really is
from that domain. To mitigate this, pages can use SSL. Pages using
SSL can be sure that only pages using SSL that have certificates
identifying them as being from the same domain can access their
- storage areas and databases.
+ storage areas.
+
+
</p>
- <h5 id=cross-directory-attacks><span class=secno>7.3.3.2 </span>Cross-directory attacks</h5>
+ <h4 id=cross-directory-attacks><span class=secno>7.5.2 </span>Cross-directory attacks</h4>
<p>Different authors sharing one host name, for example users
hosting content on <code>geocities.com</code>, all share one
- common set of storage objects and databases.
+ local storage object.
+
+
There is no feature to restrict the access by pathname. Authors on
shared hosts are therefore recommended to avoid using these
features, as it would be trivial for other authors to read the data
@@ -59466,7 +58519,7 @@
path.</p>
- <h5 id=implementation-risks><span class=secno>7.3.3.3 </span>Implementation risks</h5>
+ <h4 id=implementation-risks><span class=secno>7.5.3 </span>Implementation risks</h4>
<p>The two primary risks when implementing these persistent storage
features are letting hostile sites read information from other
@@ -59492,32 +58545,9 @@
-
- <h5 id=sql-and-user-agents><span class=secno>7.3.3.4 </span>SQL and user agents</h5>
-
- <p>User agent implementors are strongly encouraged to audit all
- their supported SQL statements for security implications. For
- example, <code title="">LOAD DATA INFILE</code> is likely to pose
- security risks and there is little reason to support it.</p>
-
- <p>In general, it is recommended that user agents not support
- features that control how databases are stored on disk. For example,
- there is little reason to allow Web authors to control the character
- encoding used in the disk representation of the data, as all data in
- JavaScript is implicitly UTF-16.</p>
-
-
- <h5 id=sql-injection><span class=secno>7.3.3.5 </span>SQL injection</h5>
-
- <p>Authors are strongly recommended to make use of the <code title="">?</code> placeholder feature of the <code title=dom-sqltransaction-executeSql><a href=#dom-sqltransaction-executesql>executeSql()</a></code> method,
- and to never construct SQL statements on the fly.</p>
-
-
-
-
<h2 id=editing><span class=secno>8 </span><dfn>User Interaction</dfn></h2>
<p>This section describes various features that allow authors to
@@ -61312,7 +60342,7 @@
</div>
- <h4 id=introduction-6><span class=secno>8.9.1 </span>Introduction</h4>
+ <h4 id=introduction-5><span class=secno>8.9.1 </span>Introduction</h4>
<p><i>This section is non-normative.</i></p>
@@ -63303,7 +62333,7 @@
"justifycenter", "justifyright", "justifyfull", "indent", "outdent"
--><h2 id=workers><span class=secno>9 </span>Web Workers</h2>
- <h3 id=introduction-7><span class=secno>9.1 </span>Introduction</h3>
+ <h3 id=introduction-6><span class=secno>9.1 </span>Introduction</h3>
<h4 id=scope-0><span class=secno>9.1.1 </span>Scope</h4>
@@ -64404,7 +63434,7 @@
<a href=#permissible-worker>permissible worker</a>.</p>
- <h4 id=processing-model-4><span class=secno>9.2.5 </span>Processing model</h4>
+ <h4 id=processing-model-3><span class=secno>9.2.5 </span>Processing model</h4>
<p>When a user agent is to <dfn id=run-a-worker>run a worker</dfn> for a script with
<a href=#url>URL</a> <var title="">url</var>, a browsing context <var title="">owner browsing context</var>, an origin <var title="">owner
@@ -65221,8 +64251,8 @@
<h4 id=apis-defined-in-other-specifications><span class=secno>9.3.3 </span>APIs defined in other specifications</h4>
- <p>The <code title=dom-opendatabase><a href=#dom-opendatabase>openDatabase()</a></code> and
- <code title=dom-opendatabase-sync><a href=#dom-opendatabase-sync>openDatabaseSync()</a></code>
+ <p>The <code title=dom-opendatabase>openDatabase()</code> and
+ <code title=dom-opendatabase-sync>openDatabaseSync()</code>
methods are defined in the Web Database specification. <a href=#refsWEBDATABASE>[WEBDATABASE]</a></p>
@@ -65542,7 +64572,7 @@
</ul><p>These values are not currently exposed on the interface.</p>
- <h4 id=processing-model-5><span class=secno>10.2.3 </span>Processing model</h4>
+ <h4 id=processing-model-4><span class=secno>10.2.3 </span>Processing model</h4>
<p>The resource indicated in the argument to the <code title=dom-EventSource><a href=#dom-eventsource>EventSource</a></code> constructor is <a href=#fetch title=fetch>fetched</a> when the constructor is run.</p>
@@ -66342,7 +65372,7 @@
<iframe>s and long polling)."><span class=secno>10.3.4 </span>The Web Socket protocol</h4>
- <h5 id=introduction-8><span class=secno>10.3.4.1 </span>Introduction</h5>
+ <h5 id=introduction-7><span class=secno>10.3.4.1 </span>Introduction</h5>
<h6 id=background-0><span class=secno>10.3.4.1.1 </span>Background</h6>
@@ -67964,7 +66994,7 @@
</div>
- <h4 id=introduction-9><span class=secno>10.4.1 </span>Introduction</h4>
+ <h4 id=introduction-8><span class=secno>10.4.1 </span>Introduction</h4>
<p><i>This section is non-normative.</i></p>
@@ -77662,7 +76692,7 @@
<tr> <td> <code title="">Otimes;</code> </td> <td> U+02A37 </td> </tr>
<tr> <td> <code title="">Ouml;</code> </td> <td> U+000D6 </td> </tr>
<tr> <td> <code title="">Ouml</code> </td> <td> U+000D6 </td> </tr> <!-- (invalid entity with missing semicolon for legacy support only) -->
- <tr> <td> <code title="">OverBar;</code> </td> <td> U+000AF </td> </tr>
+ <tr> <td> <code title="">OverBar;</code> </td> <td> U+0203E </td> </tr>
<tr> <td> <code title="">OverBrace;</code> </td> <td> U+023DE </td> </tr>
<tr> <td> <code title="">OverBracket;</code> </td> <td> U+023B4 </td> </tr>
<tr> <td> <code title="">OverParenthesis;</code> </td> <td> U+023DC </td> </tr>
@@ -77811,7 +76841,7 @@
<tr> <td> <code title="">Ugrave;</code> </td> <td> U+000D9 </td> </tr>
<tr> <td> <code title="">Ugrave</code> </td> <td> U+000D9 </td> </tr> <!-- (invalid entity with missing semicolon for legacy support only) -->
<tr> <td> <code title="">Umacr;</code> </td> <td> U+0016A </td> </tr>
- <tr> <td> <code title="">UnderBar;</code> </td> <td> U+00332 </td> </tr>
+ <tr> <td> <code title="">UnderBar;</code> </td> <td> U+0005F </td> </tr>
<tr> <td> <code title="">UnderBrace;</code> </td> <td> U+023DF </td> </tr>
<tr> <td> <code title="">UnderBracket;</code> </td> <td> U+023B5 </td> </tr>
<tr> <td> <code title="">UnderParenthesis;</code> </td> <td> U+023DD </td> </tr>
@@ -78268,9 +77298,9 @@
<tr> <td> <code title="">epar;</code> </td> <td> U+022D5 </td> </tr>
<tr> <td> <code title="">eparsl;</code> </td> <td> U+029E3 </td> </tr>
<tr> <td> <code title="">eplus;</code> </td> <td> U+02A71 </td> </tr>
- <tr> <td> <code title="">epsi;</code> </td> <td> U+003F5 </td> </tr>
+ <tr> <td> <code title="">epsi;</code> </td> <td> U+003B5 </td> </tr>
<tr> <td> <code title="">epsilon;</code> </td> <td> U+003B5 </td> </tr>
- <tr> <td> <code title="">epsiv;</code> </td> <td> U+003B5 </td> </tr>
+ <tr> <td> <code title="">epsiv;</code> </td> <td> U+003F5 </td> </tr>
<tr> <td> <code title="">eqcirc;</code> </td> <td> U+02256 </td> </tr>
<tr> <td> <code title="">eqcolon;</code> </td> <td> U+02255 </td> </tr>
<tr> <td> <code title="">eqsim;</code> </td> <td> U+02242 </td> </tr>
@@ -78881,7 +77911,7 @@
<tr> <td> <code title="">pertenk;</code> </td> <td> U+02031 </td> </tr>
<tr> <td> <code title="">pfr;</code> </td> <td> U+1D52D </td> </tr>
<tr> <td> <code title="">phi;</code> </td> <td> U+003C6 </td> </tr>
- <tr> <td> <code title="">phiv;</code> </td> <td> U+003C6 </td> </tr>
+ <tr> <td> <code title="">phiv;</code> </td> <td> U+003D5 </td> </tr>
<tr> <td> <code title="">phmmat;</code> </td> <td> U+02133 </td> </tr>
<tr> <td> <code title="">phone;</code> </td> <td> U+0260E </td> </tr>
<tr> <td> <code title="">pi;</code> </td> <td> U+003C0 </td> </tr>
@@ -79319,10 +78349,10 @@
<tr> <td> <code title="">vBarv;</code> </td> <td> U+02AE9 </td> </tr>
<tr> <td> <code title="">vDash;</code> </td> <td> U+022A8 </td> </tr>
<tr> <td> <code title="">vangrt;</code> </td> <td> U+0299C </td> </tr>
- <tr> <td> <code title="">varepsilon;</code> </td> <td> U+003B5 </td> </tr>
+ <tr> <td> <code title="">varepsilon;</code> </td> <td> U+003F5 </td> </tr>
<tr> <td> <code title="">varkappa;</code> </td> <td> U+003F0 </td> </tr>
<tr> <td> <code title="">varnothing;</code> </td> <td> U+02205 </td> </tr>
- <tr> <td> <code title="">varphi;</code> </td> <td> U+003C6 </td> </tr>
+ <tr> <td> <code title="">varphi;</code> </td> <td> U+003D5 </td> </tr>
<tr> <td> <code title="">varpi;</code> </td> <td> U+003D6 </td> </tr>
<tr> <td> <code title="">varpropto;</code> </td> <td> U+0221D </td> </tr>
<tr> <td> <code title="">varr;</code> </td> <td> U+02195 </td> </tr>
@@ -79706,7 +78736,7 @@
lead to this experience.</i></p>
- <h3 id=introduction-10><span class=secno>13.1 </span>Introduction</h3>
+ <h3 id=introduction-9><span class=secno>13.1 </span>Introduction</h3>
<p>In general, user agents are expected to support CSS, and many of
the suggestions in this section are expressed in CSS terms. User
@@ -79744,7 +78774,7 @@
<h3 id=the-css-user-agent-style-sheet-and-presentational-hints><span class=secno>13.2 </span>The CSS user agent style sheet and presentational hints</h3>
- <h4 id=introduction-11><span class=secno>13.2.1 </span>Introduction</h4>
+ <h4 id=introduction-10><span class=secno>13.2.1 </span>Introduction</h4>
<p>The CSS rules given in these subsections are, except where
otherwise specified, expected to be used as part of the user-agent
@@ -80946,7 +79976,7 @@
<h3 id=bindings><span class=secno>13.4 </span>Bindings</h3>
- <h4 id=introduction-12><span class=secno>13.4.1 </span>Introduction</h4>
+ <h4 id=introduction-11><span class=secno>13.4.1 </span>Introduction</h4>
<p>A number of elements have their rendering defined in terms of the
'binding' property. <a href=#refsBECSS>[BECSS]</a></p>
@@ -86884,9 +85914,6 @@
for information interchange</cite>. Japanese Standards Association,
1997.</dd>
- <dt id=refsSQL>[SQL]</dt>
- <dd>The precise dialect has not yet been specified.</dd>
-
<dt id=refsSRGB>[SRGB]</dt>
<dd><cite><a href="http://webstore.iec.ch/webstore/webstore.nsf/artnum/025408!OpenDocument&Click=">IEC
61966-2-1: Multimedia systems and equipment — Colour measurement
Modified: entities-unicode.inc
===================================================================
--- entities-unicode.inc 2009-11-02 00:43:24 UTC (rev 4373)
+++ entities-unicode.inc 2009-11-03 23:00:59 UTC (rev 4374)
@@ -33,6 +33,7 @@
<tr> <td> <code title="">rbrack;</code> </td> <td> U+0005D </td> </tr>
<tr> <td> <code title="">Hat;</code> </td> <td> U+0005E </td> </tr>
<tr> <td> <code title="">lowbar;</code> </td> <td> U+0005F </td> </tr>
+ <tr> <td> <code title="">UnderBar;</code> </td> <td> U+0005F </td> </tr>
<tr> <td> <code title="">grave;</code> </td> <td> U+00060 </td> </tr>
<tr> <td> <code title="">DiacriticalGrave;</code> </td> <td> U+00060 </td> </tr>
<tr> <td> <code title="">lcub;</code> </td> <td> U+0007B </td> </tr>
@@ -65,7 +66,6 @@
<tr> <td> <code title="">circledR;</code> </td> <td> U+000AE </td> </tr>
<tr> <td> <code title="">REG;</code> </td> <td> U+000AE </td> </tr>
<tr> <td> <code title="">macr;</code> </td> <td> U+000AF </td> </tr>
- <tr> <td> <code title="">OverBar;</code> </td> <td> U+000AF </td> </tr>
<tr> <td> <code title="">strns;</code> </td> <td> U+000AF </td> </tr>
<tr> <td> <code title="">deg;</code> </td> <td> U+000B0 </td> </tr>
<tr> <td> <code title="">plusmn;</code> </td> <td> U+000B1 </td> </tr>
@@ -295,7 +295,6 @@
<tr> <td> <code title="">dblac;</code> </td> <td> U+002DD </td> </tr>
<tr> <td> <code title="">DiacriticalDoubleAcute;</code> </td> <td> U+002DD </td> </tr>
<tr> <td> <code title="">DownBreve;</code> </td> <td> U+00311 </td> </tr>
- <tr> <td> <code title="">UnderBar;</code> </td> <td> U+00332 </td> </tr>
<tr> <td> <code title="">Alpha;</code> </td> <td> U+00391 </td> </tr>
<tr> <td> <code title="">Beta;</code> </td> <td> U+00392 </td> </tr>
<tr> <td> <code title="">Gamma;</code> </td> <td> U+00393 </td> </tr>
@@ -325,8 +324,7 @@
<tr> <td> <code title="">beta;</code> </td> <td> U+003B2 </td> </tr>
<tr> <td> <code title="">gamma;</code> </td> <td> U+003B3 </td> </tr>
<tr> <td> <code title="">delta;</code> </td> <td> U+003B4 </td> </tr>
- <tr> <td> <code title="">epsiv;</code> </td> <td> U+003B5 </td> </tr>
- <tr> <td> <code title="">varepsilon;</code> </td> <td> U+003B5 </td> </tr>
+ <tr> <td> <code title="">epsi;</code> </td> <td> U+003B5 </td> </tr>
<tr> <td> <code title="">epsilon;</code> </td> <td> U+003B5 </td> </tr>
<tr> <td> <code title="">zeta;</code> </td> <td> U+003B6 </td> </tr>
<tr> <td> <code title="">eta;</code> </td> <td> U+003B7 </td> </tr>
@@ -348,8 +346,6 @@
<tr> <td> <code title="">upsi;</code> </td> <td> U+003C5 </td> </tr>
<tr> <td> <code title="">upsilon;</code> </td> <td> U+003C5 </td> </tr>
<tr> <td> <code title="">phi;</code> </td> <td> U+003C6 </td> </tr>
- <tr> <td> <code title="">phiv;</code> </td> <td> U+003C6 </td> </tr>
- <tr> <td> <code title="">varphi;</code> </td> <td> U+003C6 </td> </tr>
<tr> <td> <code title="">chi;</code> </td> <td> U+003C7 </td> </tr>
<tr> <td> <code title="">psi;</code> </td> <td> U+003C8 </td> </tr>
<tr> <td> <code title="">omega;</code> </td> <td> U+003C9 </td> </tr>
@@ -359,6 +355,8 @@
<tr> <td> <code title="">Upsi;</code> </td> <td> U+003D2 </td> </tr>
<tr> <td> <code title="">upsih;</code> </td> <td> U+003D2 </td> </tr>
<tr> <td> <code title="">straightphi;</code> </td> <td> U+003D5 </td> </tr>
+ <tr> <td> <code title="">phiv;</code> </td> <td> U+003D5 </td> </tr>
+ <tr> <td> <code title="">varphi;</code> </td> <td> U+003D5 </td> </tr>
<tr> <td> <code title="">piv;</code> </td> <td> U+003D6 </td> </tr>
<tr> <td> <code title="">varpi;</code> </td> <td> U+003D6 </td> </tr>
<tr> <td> <code title="">Gammad;</code> </td> <td> U+003DC </td> </tr>
@@ -368,8 +366,9 @@
<tr> <td> <code title="">varkappa;</code> </td> <td> U+003F0 </td> </tr>
<tr> <td> <code title="">rhov;</code> </td> <td> U+003F1 </td> </tr>
<tr> <td> <code title="">varrho;</code> </td> <td> U+003F1 </td> </tr>
- <tr> <td> <code title="">epsi;</code> </td> <td> U+003F5 </td> </tr>
+ <tr> <td> <code title="">epsiv;</code> </td> <td> U+003F5 </td> </tr>
<tr> <td> <code title="">straightepsilon;</code> </td> <td> U+003F5 </td> </tr>
+ <tr> <td> <code title="">varepsilon;</code> </td> <td> U+003F5 </td> </tr>
<tr> <td> <code title="">bepsi;</code> </td> <td> U+003F6 </td> </tr>
<tr> <td> <code title="">backepsilon;</code> </td> <td> U+003F6 </td> </tr>
<tr> <td> <code title="">IOcy;</code> </td> <td> U+00401 </td> </tr>
@@ -522,6 +521,7 @@
<tr> <td> <code title="">lsaquo;</code> </td> <td> U+02039 </td> </tr>
<tr> <td> <code title="">rsaquo;</code> </td> <td> U+0203A </td> </tr>
<tr> <td> <code title="">oline;</code> </td> <td> U+0203E </td> </tr>
+ <tr> <td> <code title="">OverBar;</code> </td> <td> U+0203E </td> </tr>
<tr> <td> <code title="">caret;</code> </td> <td> U+02041 </td> </tr>
<tr> <td> <code title="">hybull;</code> </td> <td> U+02043 </td> </tr>
<tr> <td> <code title="">frasl;</code> </td> <td> U+02044 </td> </tr>
Modified: index
===================================================================
--- index 2009-11-02 00:43:24 UTC (rev 4373)
+++ index 2009-11-03 23:00:59 UTC (rev 4374)
@@ -111,7 +111,7 @@
<header class=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG src=/images/logo></a></p>
<hgroup><h1>HTML5</h1>
- <h2 class="no-num no-toc">Draft Standard — 27 October 2009</h2>
+ <h2 class="no-num no-toc">Draft Standard — 3 November 2009</h2>
</hgroup><p>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></p>
<p><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</p>
<!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
@@ -61856,7 +61856,7 @@
<dd>Switch to the <a href=#rcdata-less-than-sign-state>RCDATA less-than sign state</a>.</dd>
<dt>EOF</dt>
- <dd>Emit an end-of-file token.</dd>
+ <dd><a href=#parse-error>Parse error</a>. Emit an end-of-file token.</dd>
<dt>Anything else</dt>
<dd>Emit the <a href=#current-input-character>current input character</a> as a character
@@ -61883,7 +61883,7 @@
<dd>Switch to the <a href=#rawtext-less-than-sign-state>RAWTEXT less-than sign state</a>.</dd>
<dt>EOF</dt>
- <dd>Emit an end-of-file token.</dd>
+ <dd><a href=#parse-error>Parse error</a>. Emit an end-of-file token.</dd>
<dt>Anything else</dt>
<dd>Emit the <a href=#current-input-character>current input character</a> as a character
@@ -61897,7 +61897,7 @@
<dd>Switch to the <a href=#script-data-less-than-sign-state>script data less-than sign state</a>.</dd>
<dt>EOF</dt>
- <dd>Emit an end-of-file token.</dd>
+ <dd><a href=#parse-error>Parse error</a>. Emit an end-of-file token.</dd>
<dt>Anything else</dt>
<dd>Emit the <a href=#current-input-character>current input character</a> as a character
@@ -68627,7 +68627,7 @@
<tr> <td> <code title="">Otimes;</code> </td> <td> U+02A37 </td> </tr>
<tr> <td> <code title="">Ouml;</code> </td> <td> U+000D6 </td> </tr>
<tr> <td> <code title="">Ouml</code> </td> <td> U+000D6 </td> </tr> <!-- (invalid entity with missing semicolon for legacy support only) -->
- <tr> <td> <code title="">OverBar;</code> </td> <td> U+000AF </td> </tr>
+ <tr> <td> <code title="">OverBar;</code> </td> <td> U+0203E </td> </tr>
<tr> <td> <code title="">OverBrace;</code> </td> <td> U+023DE </td> </tr>
<tr> <td> <code title="">OverBracket;</code> </td> <td> U+023B4 </td> </tr>
<tr> <td> <code title="">OverParenthesis;</code> </td> <td> U+023DC </td> </tr>
@@ -68776,7 +68776,7 @@
<tr> <td> <code title="">Ugrave;</code> </td> <td> U+000D9 </td> </tr>
<tr> <td> <code title="">Ugrave</code> </td> <td> U+000D9 </td> </tr> <!-- (invalid entity with missing semicolon for legacy support only) -->
<tr> <td> <code title="">Umacr;</code> </td> <td> U+0016A </td> </tr>
- <tr> <td> <code title="">UnderBar;</code> </td> <td> U+00332 </td> </tr>
+ <tr> <td> <code title="">UnderBar;</code> </td> <td> U+0005F </td> </tr>
<tr> <td> <code title="">UnderBrace;</code> </td> <td> U+023DF </td> </tr>
<tr> <td> <code title="">UnderBracket;</code> </td> <td> U+023B5 </td> </tr>
<tr> <td> <code title="">UnderParenthesis;</code> </td> <td> U+023DD </td> </tr>
@@ -69233,9 +69233,9 @@
<tr> <td> <code title="">epar;</code> </td> <td> U+022D5 </td> </tr>
<tr> <td> <code title="">eparsl;</code> </td> <td> U+029E3 </td> </tr>
<tr> <td> <code title="">eplus;</code> </td> <td> U+02A71 </td> </tr>
- <tr> <td> <code title="">epsi;</code> </td> <td> U+003F5 </td> </tr>
+ <tr> <td> <code title="">epsi;</code> </td> <td> U+003B5 </td> </tr>
<tr> <td> <code title="">epsilon;</code> </td> <td> U+003B5 </td> </tr>
- <tr> <td> <code title="">epsiv;</code> </td> <td> U+003B5 </td> </tr>
+ <tr> <td> <code title="">epsiv;</code> </td> <td> U+003F5 </td> </tr>
<tr> <td> <code title="">eqcirc;</code> </td> <td> U+02256 </td> </tr>
<tr> <td> <code title="">eqcolon;</code> </td> <td> U+02255 </td> </tr>
<tr> <td> <code title="">eqsim;</code> </td> <td> U+02242 </td> </tr>
@@ -69846,7 +69846,7 @@
<tr> <td> <code title="">pertenk;</code> </td> <td> U+02031 </td> </tr>
<tr> <td> <code title="">pfr;</code> </td> <td> U+1D52D </td> </tr>
<tr> <td> <code title="">phi;</code> </td> <td> U+003C6 </td> </tr>
- <tr> <td> <code title="">phiv;</code> </td> <td> U+003C6 </td> </tr>
+ <tr> <td> <code title="">phiv;</code> </td> <td> U+003D5 </td> </tr>
<tr> <td> <code title="">phmmat;</code> </td> <td> U+02133 </td> </tr>
<tr> <td> <code title="">phone;</code> </td> <td> U+0260E </td> </tr>
<tr> <td> <code title="">pi;</code> </td> <td> U+003C0 </td> </tr>
@@ -70284,10 +70284,10 @@
<tr> <td> <code title="">vBarv;</code> </td> <td> U+02AE9 </td> </tr>
<tr> <td> <code title="">vDash;</code> </td> <td> U+022A8 </td> </tr>
<tr> <td> <code title="">vangrt;</code> </td> <td> U+0299C </td> </tr>
- <tr> <td> <code title="">varepsilon;</code> </td> <td> U+003B5 </td> </tr>
+ <tr> <td> <code title="">varepsilon;</code> </td> <td> U+003F5 </td> </tr>
<tr> <td> <code title="">varkappa;</code> </td> <td> U+003F0 </td> </tr>
<tr> <td> <code title="">varnothing;</code> </td> <td> U+02205 </td> </tr>
- <tr> <td> <code title="">varphi;</code> </td> <td> U+003C6 </td> </tr>
+ <tr> <td> <code title="">varphi;</code> </td> <td> U+003D5 </td> </tr>
<tr> <td> <code title="">varpi;</code> </td> <td> U+003D6 </td> </tr>
<tr> <td> <code title="">varpropto;</code> </td> <td> U+0221D </td> </tr>
<tr> <td> <code title="">varr;</code> </td> <td> U+02195 </td> </tr>
Modified: source
===================================================================
--- source 2009-11-02 00:43:24 UTC (rev 4373)
+++ source 2009-11-03 23:00:59 UTC (rev 4374)
@@ -328,10 +328,10 @@
with multiple pages, links between pages, and running scripts.</dd>
<!--END html5-->
- <dt><a href="#storage-and-database">Structured client-side storage APIs</a></dt>
+ <dt><a href="#webstorage">Web Storage</a></dt>
- <dd>This specification defines two client-side storage mechanisms:
- a flat storage mechanism, and an API based on SQL databases.</dd>
+ <dd>This specification defines a client-side storage mechanism
+ based on name-value pairs.</dd>
<!--START html5-->
<dt><a href="#editing">User Interaction</a></dt>
@@ -65355,10 +65355,13 @@
<!--END html5-->
+<!--END complete-->
<h2 id="storage-and-database">Structured client-side storage APIs</h2>
- <h3>Web Storage</h3>
+<!--START complete-->
+<!--FIXUP -1-->
+ <h3 id="webstorage">Web Storage</h3>
<!--START storage-->
@@ -65848,6 +65851,7 @@
itself.</p>
<!--END storage-->
+ <!--END complete-->
<h3>Web Database</h3>
@@ -65937,10 +65941,8 @@
});
}</pre>
-<!--END complete-->
<!--BOILERPLATE middle-w3c-api-intro-->
<!--BOILERPLATE middle-w3c-js-disclaimer-->
-<!--START complete-->
<h4 id="sql">The API</h4>
@@ -66921,27 +66923,30 @@
<h4>Web SQL</h4>
- <p class="XXX">Need to define the SQL dialect.</p>
+ <p>User agents must implement the SQL dialect supported by Sqlite 3.6.19.</p>
<!--END database-->
+ <!--END complete--> <!-- the next <h3> section needs reworking if we re-add database to complete -->
+
<h3>Common concerns</h3>
+ <!--START complete-->
<!--START database-->
<!--START storage-->
<h4>Disk space</h4>
<p>User agents should limit the total amount of space allowed for
- <!--END complete-->
<!--END database-->
storage areas.
<!--END storage-->
+ <!--END complete-->
<!--START database-->
databases.
<!--END database-->
+ these storage features.
<!--START complete-->
- these storage features.
<!--START database-->
<!--START storage-->
</p>
@@ -66981,9 +66986,11 @@
<!--END database-->
local storage area
<!--END storage-->
+ <!--END complete-->
or its
<!--START database-->
client-side databases
+ <!--START complete-->
<!--START storage-->
to track a user across multiple sessions, building a profile of the
user's interests to allow for highly targeted advertising. In
@@ -67005,9 +67012,11 @@
<!--END database-->
the <code title="dom-localStorage">localStorage</code> objects
<!--END storage-->
+ <!--END complete-->
and
<!--START database-->
the database objects
+ <!--START complete-->
<!--START storage-->
to scripts originating at the domain of the top-level document of
the <span>browsing context</span>, for instance denying access to
@@ -67051,15 +67060,15 @@
<p>If users attempt to protect their privacy by clearing cookies
without also clearing data stored in the
- <!--END complete-->
<!--END database-->
local storage area,
<!--END storage-->
+ <!--END complete-->
<!--START database-->
relevant databases,
<!--END database-->
+ local storage area and relevant databases,
<!--START complete-->
- local storage area and relevant databases,
<!--START database-->
<!--START storage-->
sites can defeat those attempts by using the two features as
@@ -67075,9 +67084,11 @@
<!--END database-->
local storage areas
<!--END storage-->
+ <!--END complete-->
and
<!--START database-->
databases
+ <!--START complete-->
<!--START storage-->
</dt>
<dd>
@@ -67087,9 +67098,12 @@
an unrestricted manner, but require the user to authorize access
to local storage areas.</p>
<!--END storage-->
+ <!--END complete-->
+
<!--START database-->
<p>User agents may require the user to authorize access to
databases before a site can use the feature.</p>
+ <!--START complete-->
<!--START storage-->
</dd>
@@ -67162,15 +67176,15 @@
from that domain. To mitigate this, pages can use SSL. Pages using
SSL can be sure that only pages using SSL that have certificates
identifying them as being from the same domain can access their
- <!--END complete-->
<!--END database-->
storage areas.
<!--END storage-->
+ <!--END complete-->
<!--START database-->
databases.
<!--END database-->
+ storage areas and databases.
<!--START complete-->
- storage areas and databases.
<!--START database-->
<!--START storage-->
</p>
@@ -67180,15 +67194,15 @@
<p>Different authors sharing one host name, for example users
hosting content on <code>geocities.com</code>, all share one
- <!--END complete-->
<!--END database-->
local storage object.
<!--END storage-->
+ <!--END complete-->
<!--START database-->
set of databases.
<!--END database-->
+ common set of storage objects and databases.
<!--START complete-->
- common set of storage objects and databases.
<!--START database-->
<!--START storage-->
There is no feature to restrict the access by pathname. Authors on
@@ -67228,6 +67242,7 @@
<!--END storage-->
+ <!--END complete-->
<h5>SQL and user agents</h5>
@@ -67250,9 +67265,10 @@
title="dom-sqltransaction-executeSql">executeSql()</code> method,
and to never construct SQL statements on the fly.</p>
-
<!--END database-->
+ <!--START complete-->
+ <!--FIXUP +1-->
<!--START html5-->
More information about the Commit-Watchers
mailing list