external_extensions.html revision 513209b27ff55e2841eac0e4120199c23acce758
1<!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc. Note:
2    1) The <head> information in this page is significant, should be uniform
3       across api docs and should be edited only with knowledge of the
4       templating mechanism.
5    3) All <body>.innerHTML is genereated as an rendering step. If viewed in a
6       browser, it will be re-generated from the template, json schema and
7       authored overview content.
8    4) The <body>.innerHTML is also generated by an offline step so that this
9       page may easily be indexed by search engines.
10--><html xmlns="http://www.w3.org/1999/xhtml"><head>
11    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
12    <link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css">
13    <link href="css/print.css" rel="stylesheet" type="text/css" media="print">
14    <script type="text/javascript" src="/third_party/jstemplate/jstemplate_compiled.js">
15    </script>
16    <script type="text/javascript" src="js/api_page_generator.js"></script>
17    <script type="text/javascript" src="js/bootstrap.js"></script>
18    <script type="text/javascript" src="js/sidebar.js"></script>
19  <title>Other Deployment Options - Google Chrome Extensions - Google Code</title></head>
20  <body>  <div id="gc-container" class="labs">
21      <div id="devModeWarning">
22        You are viewing extension docs in chrome via the 'file:' scheme: are you expecting to see local changes when you refresh? You'll need run chrome with --allow-file-access-from-files.
23      </div>
24      <!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION -->
25      <!-- In particular, sub-templates that recurse, must be used by allowing
26           jstemplate to make a copy of the template in this section which
27           are not operated on by way of the jsskip="true" -->
28      <div style="display:none">
29
30        <!-- VALUE -->
31        <div id="valueTemplate">
32          <dt>
33            <var>paramName</var>
34              <em>
35
36                <!-- TYPE -->
37                <div style="display:inline">
38                  (
39                    <span class="optional">optional</span>
40                    <span class="enum">enumerated</span>
41                    <span id="typeTemplate">
42                      <span>
43                        <a> Type</a>
44                      </span>
45                      <span>
46                        <span>
47                          array of <span><span></span></span>
48                        </span>
49                        <span>paramType</span>
50                        <span></span>
51                      </span>
52                    </span>
53                  )
54                </div>
55
56              </em>
57          </dt>
58          <dd class="todo">
59            Undocumented.
60          </dd>
61          <dd>
62            Description of this parameter from the json schema.
63          </dd>
64          <dd>
65            This parameter was added in version
66            <b><span></span></b>.
67            You must omit this parameter in earlier versions,
68            and you may omit it in any version.  If you require this
69            parameter, the manifest key
70            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
71            can ensure that your extension won't be run in an earlier browser version.
72          </dd>
73
74          <!-- OBJECT PROPERTIES -->
75          <dd>
76            <dl>
77              <div>
78                <div>
79                </div>
80              </div>
81            </dl>
82          </dd>
83
84          <!-- FUNCTION PARAMETERS -->
85          <dd>
86            <div></div>
87          </dd>
88
89        </div> <!-- /VALUE -->
90
91        <div id="functionParametersTemplate">
92          <h5>Parameters</h5>
93          <dl>
94            <div>
95              <div>
96              </div>
97            </div>
98          </dl>
99        </div>
100      </div> <!-- /SUBTEMPLATES -->
101
102  <a id="top"></a>
103    <div id="skipto">
104      <a href="#gc-pagecontent">Skip to page content</a>
105      <a href="#gc-toc">Skip to main navigation</a>
106    </div>
107    <!-- API HEADER -->
108    <table id="header" width="100%" cellspacing="0" border="0">
109      <tbody><tr>
110        <td valign="middle"><a href="http://code.google.com/"><img src="images/code_labs_logo.gif" height="43" width="161" alt="Google Code Labs" style="border:0; margin:0;"></a></td>
111        <td valign="middle" width="100%" style="padding-left:0.6em;">
112          <form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em">
113            <div id="gsc-search-box">
114              <input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno">
115              <input type="hidden" name="ie" value="UTF-8">
116              <input type="text" name="q" value="" size="55">
117              <input class="gsc-search-button" type="submit" name="sa" value="Search">
118              <br>
119              <span class="greytext">e.g. "page action" or "tabs"</span>
120            </div>
121          </form>
122
123          <script type="text/javascript" src="http://www.google.com/jsapi"></script>
124          <script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script>
125          <script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse&t13n_langs=en"></script>
126          <script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&lang=en"></script>
127        </td>
128      </tr>
129    </tbody></table>
130
131    <div id="codesiteContent" class="">
132
133      <a id="gc-topnav-anchor"></a>
134      <div id="gc-topnav">
135        <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1>
136        <ul id="home" class="gc-topnav-tabs">
137          <li id="home_link">
138            <a href="index.html" title="Google Chrome Extensions home page">Home</a>
139          </li>
140          <li id="docs_link">
141            <a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a>
142          </li>
143          <li id="faq_link">
144            <a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a>
145          </li>
146          <li id="samples_link">
147            <a href="samples.html" title="Sample extensions (with source code)">Samples</a>
148          </li>
149          <li id="group_link">
150            <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a>
151          </li>
152        </ul>
153      </div> <!-- end gc-topnav -->
154
155    <div class="g-section g-tpl-170">
156      <!-- SIDENAV -->
157      <div class="g-unit g-first" id="gc-toc">
158        <ul>
159          <li><a href="getstarted.html">Getting Started</a></li>
160          <li><a href="overview.html">Overview</a></li>
161          <li><a href="whats_new.html">What's New?</a></li>
162          <li><h2><a href="devguide.html">Developer's Guide</a></h2>
163            <ul>
164              <li>Browser UI
165                <ul>
166                  <li><a href="browserAction.html">Browser Actions</a></li>
167                  <li><a href="contextMenus.html">Context Menus</a></li>
168                  <li><a href="notifications.html">Desktop Notifications</a></li>
169                  <li><a href="options.html">Options Pages</a></li>
170                  <li><a href="override.html">Override Pages</a></li>
171                  <li><a href="pageAction.html">Page Actions</a></li>
172                  <li><a href="themes.html">Themes</a></li>
173                </ul>
174              </li>
175              <li>Browser Interaction
176                <ul>
177                  <li><a href="bookmarks.html">Bookmarks</a></li>
178                  <li><a href="cookies.html">Cookies</a></li>
179                  <li><a href="events.html">Events</a></li>
180                  <li><a href="history.html">History</a></li>
181                  <li><a href="management.html">Management</a></li>
182                  <li><a href="tabs.html">Tabs</a></li>
183                  <li><a href="windows.html">Windows</a></li>
184                </ul>
185              </li>
186              <li>Implementation
187                <ul>
188                  <li><a href="a11y.html">Accessibility</a></li>
189                  <li><a href="background_pages.html">Background Pages</a></li>
190                  <li><a href="content_scripts.html">Content Scripts</a></li>
191                  <li><a href="xhr.html">Cross-Origin XHR</a></li>
192                  <li><a href="idle.html">Idle</a></li>
193                  <li><a href="i18n.html">Internationalization</a></li>
194                  <li><a href="messaging.html">Message Passing</a></li>
195                  <li><a href="npapi.html">NPAPI Plugins</a></li>
196                </ul>
197              </li>
198              <li>Finishing
199                <ul>
200                  <li><a href="hosting.html">Hosting</a></li>
201                  <li class="leftNavSelected">Other Deployment Options</li>
202                </ul>
203              </li>
204            </ul>
205          </li>
206          <li><h2><a href="tutorials.html">Tutorials</a></h2>
207            <ul>
208              <li><a href="tut_debugging.html">Debugging</a></li>
209              <li><a href="tut_analytics.html">Google Analytics</a></li>
210              <li><a href="tut_oauth.html">OAuth</a></li>
211            </ul>
212          </li>
213          <li><h2>Reference</h2>
214            <ul>
215              <li>Formats
216                <ul>
217                  <li><a href="manifest.html">Manifest Files</a></li>
218                  <li><a href="match_patterns.html">Match Patterns</a></li>
219                  <!-- <li>Packages (.crx)</li> -->
220                </ul>
221              </li>
222              <li><a href="api_index.html">chrome.* APIs</a></li>
223              <li><a href="api_other.html">Other APIs</a></li>
224            </ul>
225          </li>
226         <li><h2><a href="samples.html">Samples</a></h2></li>
227        </ul>
228      </div>
229      <script>
230        initToggles();
231      </script>
232
233    <div class="g-unit" id="gc-pagecontent">
234      <div id="pageTitle">
235        <h1 class="page_title">Other Deployment Options</h1>
236      </div>
237        <!-- TABLE OF CONTENTS -->
238        <div id="toc">
239          <h2>Contents</h2>
240          <ol>
241            <li>
242              <a href="#prereqs">Before you begin</a>
243              <ol>
244                <li style="display: none; ">
245                  <a>h3Name</a>
246                </li>
247              </ol>
248            </li><li>
249              <a href="#preferences">Using a preferences file</a>
250              <ol>
251                <li style="display: none; ">
252                  <a>h3Name</a>
253                </li>
254              </ol>
255            </li><li>
256              <a href="#registry">Using the Windows registry</a>
257              <ol>
258                <li style="display: none; ">
259                  <a>h3Name</a>
260                </li>
261              </ol>
262            </li><li>
263              <a href="#updating">Updating and uninstalling</a>
264              <ol>
265                <li style="display: none; ">
266                  <a>h3Name</a>
267                </li>
268              </ol>
269            </li><li>
270              <a href="#faq">FAQ</a>
271              <ol>
272                <li style="display: none; ">
273                  <a>h3Name</a>
274                </li>
275              </ol>
276            </li>
277              <li style="display: none; ">
278                <a href="#apiReference">API reference</a>
279                <ol>
280                  <li>
281                    <a href="#properties">Properties</a>
282                    <ol>
283                      <li>
284                        <a href="#property-anchor">propertyName</a>
285                      </li>
286                    </ol>
287                  </li>
288                  <li>
289                    <a href="#methods">Methods</a>
290                    <ol>
291                      <li>
292                        <a href="#method-anchor">methodName</a>
293                      </li>
294                    </ol>
295                  </li>
296                  <li>
297                    <a href="#events">Events</a>
298                    <ol>
299                      <li>
300                        <a href="#event-anchor">eventName</a>
301                      </li>
302                    </ol>
303                  </li>
304                  <li>
305                    <a href="#types">Types</a>
306                    <ol>
307                      <li>
308                        <a href="#id-anchor">id</a>
309                      </li>
310                    </ol>
311                  </li>
312                </ol>
313              </li>
314          </ol>
315        </div>
316        <!-- /TABLE OF CONTENTS -->
317
318        <!-- Standard content lead-in for experimental API pages -->
319        <p id="classSummary" style="display: none; ">
320          For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page.
321        </p>
322
323        <!-- STATIC CONTENT PLACEHOLDER -->
324        <div id="static"><div id="pageData-name" class="pageData">Other Deployment Options</div>
325<div id="pageData-showTOC" class="pageData">true</div>
326
327<p>
328Usually, users install their own extensions.
329But sometimes you might want an extension
330to be installed automatically.
331Here are two typical cases:
332</p>
333
334<ul>
335  <li>
336    An extension is associated with some other software,
337    and the extension should be installed
338    whenever the user installs that other software.
339    The extension could also be uninstalled
340    when the user removes that other software.
341  </li>
342  <li>
343    A network admin wants to install the same extensions
344    throughout the company.
345  </li>
346</ul>
347
348<p>
349An extension that's installed automatically is known as an
350<em>external extension</em>.
351Google Chrome supports two ways of
352installing external extensions:
353</p>
354
355<ul>
356  <li> Using a preferences JSON file </li>
357  <li> Using the Windows registry (Windows only) </li>
358</ul>
359
360<p>
361Both ways support installing an extension from a <code>.crx</code> extension
362file on the user's computer.  The preferences JSON file also supports installing
363an extension hosted at an
364<a href="autoupdate.html#H2-1">update URL</a>.
365See <a href="hosting.html">hosting</a> for details on hosting an extension.
366</p>
367
368<h2 id="prereqs">Before you begin</h2>
369
370<p>
371First, package a
372<a href="packaging.html"><code>.crx</code> file</a>
373and make sure that it installs successfully.
374</p>
375<p>
376If you wish to install from an
377 <a href="autoupdate.html#H2-1">update URL</a>, ensure that the extension
378is properly <a href="hosting.html">hosted</a>.
379</p>
380
381<p>
382Then, before you edit the preferences file or the registry,
383make a note of the following:
384</p>
385
386<ul>
387 <li> The intended <b>location</b> of the extension's <code>.crx</code> file,
388        or the update URL from which it is served </li>
389 <li> The extension's <b>version</b>
390   (from the manifest file or the <b>chrome://extensions</b> page) </li>
391 <li> The extension's <b>ID</b>
392   (from the <b>chrome://extensions</b> page
393   when you've loaded the packed extension) </li>
394</ul>
395
396<p>
397The following examples assume the version is <code>1.0</code>
398and the ID is <code>aaaaaaaaaabbbbbbbbbbcccccccccc</code>.
399</p>
400
401<h2 id="preferences">Using a preferences file</h2>
402
403<p class="note">
404<b>Windows note:</b>
405Until <a href="http://crbug.com/41902">bug 41902</a> is fixed,
406you might want to use the <a href="#registry">Windows registry</a>
407instead of the preferences file.
408
409</p>
410
411<ol>
412<li>If you are installing from a file, make the <code>.crx</code> extension
413file available to the machine you want to install the extension on.
414(Copy it to a local directory or to a network share for example,
415<code>\\server\share\extension.crx</code>
416or <code>/home/share/extension.crx</code>.)
417</li>
418<li>Locate the <code>external_extensions.json</code> file
419  under the Google Chrome installation directory.
420  If the file doesn't exist, create it.
421  The location depends on the operating system.
422  <dl>
423  <dt> Windows: </dt>
424    <dd> <code><em>chrome_root</em>\Application\<em>chrome_version</em>\Extensions\</code>
425    <br>
426    Example: <code>c:\Users\Me\AppData\Local\Google\Chrome\Application\6.0.422.0\Extensions\</code>
427    </dd>
428  <dt> Mac OS X: </dt>
429    <dd> <code>/Applications/Google Chrome.app/Contents/Extensions/</code> </dd>
430  <dt> Linux: </dt>
431    <dd> <code>/opt/google/chrome/extensions/</code> <br>
432    <b>Note:</b> Use <code>chmod</code> if necessary
433    to make sure that <code>extensions/external_extensions.json</code>
434    is world-readable.
435    </dd>
436  </dl>
437</li>
438<li> Add an entry to <code>external_extensions.json</code>
439for your extension's ID.  If you are installing from a file, specify the
440extension's location and version with fields named "external_crx" and
441"external_version".
442
443Example:
444<pre>{
445  "aaaaaaaaaabbbbbbbbbbcccccccccc": {
446    "external_crx": "/home/share/extension.crx",
447    "external_version": "1.0"
448  }
449}</pre>
450
451<p class="note">
452<b>Note:</b>
453You need to escape
454each <code>\</code> character in the location.
455For example,
456<code>\\server\share\extension.crx</code> would be
457<code>"\\\\server\\share\\extension.crx"</code>.
458</p>
459<p>
460If you are installing from an update URL, specify the extension's update URL
461with field name "external_update_url".
462</p>
463Example:
464<pre>{
465  "aaaaaaaaaabbbbbbbbbbcccccccccc": {
466    "external_update_url": "http://myhost.com/mytestextension/updates.xml"
467  }
468}</pre>
469</li>
470
471<li>Save the JSON file. </li>
472<li>Launch Google Chrome and go to <b>chrome://extensions</b>;
473you should see the extension listed. </li>
474</ol>
475
476<h2 id="registry">Using the Windows registry</h2>
477
478<ol>
479<li>Make the <code>.crx</code> extension file available
480to the machine you want to install the extension on.
481(Copy it to a local directory or to a network share —
482for example, <code>\\server\share\extension.crx</code>.)
483</li>
484<li>Find or create the following key in the
485registry:
486<ul>
487  <li> 32-bit Windows: <code>HKEY_LOCAL_MACHINE\Software\Google\Chrome\Extensions</code> </li>
488  <li> 64-bit Windows: <code>HKEY_LOCAL_MACHINE\Software\Wow6432Node\Google\Chrome\Extensions</code> </li>
489</ul>
490</li>
491
492<li>Create a new key (folder)
493under the <b>Extensions</b> key with the
494same name as the ID of your extension
495(for example, <code>aaaaaaaaaabbbbbbbbbbcccccccccc</code>).
496</li>
497<li>Create two string values (<code>REG_SZ</code>) named "path" and "version",
498  and set them to the extension's location and version.
499  For example:
500<ul>
501  <li>path: <code>\\server\share\extension.crx</code> </li>
502  <li>version: <code>1.0</code> </li>
503</ul>
504</li>
505<li>Launch the browser and go to
506<b>chrome://extensions</b>; you should
507see the extension listed. </li>
508</ol>
509
510<h2 id="updating">Updating and uninstalling</h2>
511
512<p>Google Chrome scans the metadata entries
513in the preferences and registry
514each time the browser starts, and makes
515any necessary changes to the installed
516external extensions. </p>
517
518<p>To update your extension to a new version,
519update the file, and then update the version
520in the preferences or registry. </p>
521
522<p>To uninstall your extension
523(for example, if your software is uninstalled),
524remove the metadata from the preferences file
525or registry. </p>
526
527<h2 id="faq">FAQ</h2>
528
529<p>
530This section answers common questions about external extensions.
531</p>
532
533<br>
534
535<p><b>Can I specify a URL as a path to the external extension?</b> </p>
536<p>Yes, if you host the extension as explained in
537<a href="hosting.html">hosting</a>.
538</p>
539
540<br>
541
542<p><b>What are some common mistakes when installing with the preferences
543file?</b></p>
544<ul>
545  <li>
546    Not specifying the same id/version
547    as the one listed in the <code>.crx</code> </li>
548  <li>
549    <code>external_extensions.json</code> is in the wrong location </li>
550  <li>
551    Syntax error in JSON file
552    (forgetting to separate entries with comma or
553    leaving a trailing comma somewhere) </li>
554  <li>
555    Extra curly brackets around the top level dictionary </li>
556  <li>
557    JSON file entry points to the wrong path
558    to the <code>.crx</code> (or path specified but no filename) </li>
559  <li>
560    Backslashes in UNC path not escaped
561    (for example, <code>"\\server\share\file"</code> is wrong;
562    it should be <code>"\\\\server\\share\\extension"</code>) </li>
563  <li>
564    Permissions problems on a network share </li>
565</ul>
566
567<br>
568
569<p><b>What are some common mistakes when installing with the registry?</b> </p>
570<ul>
571  <li>Not specifying the same id/version
572    as the one listed in the <code>.crx</code> </li>
573  <li>Key created in the wrong location in the registry </li>
574  <li>Registry entry points to the wrong path to the <code>.crx</code> file
575    (or path specified but no filename) </li>
576  <li>Permissions problems on a network share </li>
577</ul>
578
579<br>
580
581<p><b>What if the user uninstalls the extension?</b> </p>
582<p>If the user uninstalls the extension through the UI, it will no
583longer be installed or updated on each startup. In other words, the
584external extension is blacklisted. </p>
585
586<br>
587
588<p><b>How do I get off the blacklist?</b> </p>
589<p>If the user uninstalls your extension, you should respect that
590decision. However, if you (the developer) accidentally uninstalled
591your extension through the UI,
592you can remove the blacklist tag
593by installing the extension normally
594through the UI, and then uninstalling it. </p>
595</div>
596
597        <!-- API PAGE -->
598        <div class="apiPage" style="display: none; ">
599        <a name="apiReference"></a>
600        <h2>API reference: chrome.apiname </h2>
601
602          <!-- PROPERTIES -->
603          <div class="apiGroup">
604            <a name="properties"></a>
605            <h3 id="properties">Properties</h3>
606
607            <div>
608              <a></a>
609              <h4>getLastError</h4>
610              <div class="summary">
611                <!-- Note: intentionally longer 80 columns -->
612                <span>chrome.extension</span><span>lastError</span>
613              </div>
614              <div>
615              </div>
616            </div>
617
618          </div> <!-- /apiGroup -->
619
620          <!-- METHODS -->
621          <div class="apiGroup" id="methods">
622            <a name="methods"></a>
623            <h3>Methods</h3>
624
625            <!-- iterates over all functions -->
626            <div class="apiItem">
627              <a></a> <!-- method-anchor -->
628              <h4>method name</h4>
629
630              <div class="summary"><span>void</span>
631                  <!-- Note: intentionally longer 80 columns -->
632                  <span>chrome.module.methodName</span>(<span><span>, </span><span></span>
633                      <var><span></span></var></span>)</div>
634
635              <div class="description">
636                <p class="todo">Undocumented.</p>
637                <p>
638                  A description from the json schema def of the function goes here.
639                </p>
640
641                <!-- PARAMETERS -->
642                <h4>Parameters</h4>
643                <dl>
644                  <div>
645                    <div>
646                    </div>
647                  </div>
648                </dl>
649
650                <!-- RETURNS -->
651                <h4>Returns</h4>
652                <dl>
653                  <div>
654                    <div>
655                    </div>
656                  </div>
657                </dl>
658
659                <!-- CALLBACK -->
660                <div>
661                  <div>
662                  <h4>Callback function</h4>
663                  <p>
664                    The callback <em>parameter</em> should specify a function
665                    that looks like this:
666                  </p>
667                  <p>
668                    If you specify the <em>callback</em> parameter, it should
669                    specify a function that looks like this:
670                  </p>
671
672                  <!-- Note: intentionally longer 80 columns -->
673                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
674                  <dl>
675                    <div>
676                      <div>
677                      </div>
678                    </div>
679                  </dl>
680                  </div>
681                </div>
682
683                <!-- MIN_VERSION -->
684                <p>
685                  This function was added in version <b><span></span></b>.
686                  If you require this function, the manifest key
687                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
688                  can ensure that your extension won't be run in an earlier browser version.
689                </p>
690              </div> <!-- /description -->
691
692            </div>  <!-- /apiItem -->
693
694          </div>  <!-- /apiGroup -->
695
696          <!-- EVENTS -->
697          <div class="apiGroup">
698            <a name="events"></a>
699            <h3 id="events">Events</h3>
700
701            <!-- iterates over all events -->
702            <div class="apiItem">
703              <a></a>
704              <h4>event name</h4>
705
706              <div class="summary">
707                <!-- Note: intentionally longer 80 columns -->
708                <span class="subdued">chrome.bookmarks</span><span>onEvent</span><span class="subdued">.addListener</span>(function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>);
709              </div>
710
711              <div class="description">
712                <p class="todo">Undocumented.</p>
713                <p>
714                  A description from the json schema def of the event goes here.
715                </p>
716
717                <!-- PARAMETERS -->
718                <h4>Parameters</h4>
719                <dl>
720                  <div>
721                    <div>
722                    </div>
723                  </div>
724                </dl>
725
726              </div> <!-- /decription -->
727
728            </div> <!-- /apiItem -->
729
730          </div> <!-- /apiGroup -->
731
732          <!-- TYPES -->
733          <div class="apiGroup">
734            <a name="types"></a>
735            <h3 id="types">Types</h3>
736
737            <!-- iterates over all types -->
738            <div class="apiItem">
739              <a></a>
740              <h4>type name</h4>
741
742              <div>
743              </div>
744
745            </div> <!-- /apiItem -->
746
747          </div> <!-- /apiGroup -->
748
749        </div> <!-- /apiPage -->
750      </div> <!-- /gc-pagecontent -->
751    </div> <!-- /g-section -->
752  </div> <!-- /codesiteContent -->
753    <div id="gc-footer" --="">
754      <div class="text">
755  <p>
756  Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
757  the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
758  Attribution 3.0 License</a>, and code samples are licensed under the
759  <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
760  </p>
761  <p>
762  ©2010 Google
763  </p>
764
765<!-- begin analytics -->
766<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
767<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>
768
769<script type="text/javascript">
770  // chrome doc tracking
771  try {
772    var engdocs = _gat._getTracker("YT-10763712-2");
773    engdocs._trackPageview();
774  } catch(err) {}
775
776  // code.google.com site-wide tracking
777  try {
778    _uacct="UA-18071-1";
779    _uanchor=1;
780    _uff=0;
781    urchinTracker();
782  }
783  catch(e) {/* urchinTracker not available. */}
784</script>
785<!-- end analytics -->
786      </div>
787    </div> <!-- /gc-footer -->
788  </div> <!-- /gc-container -->
789</body></html>
790