Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: chrome/common/extensions/docs/experimental.ttsEngine.html

Issue 7282048: Update TTS extension API docs to reflect latest changes. Note that this (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 <!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc. Note: 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 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 3 across api docs and should be edited only with knowledge of the
4 templating mechanism. 4 templating mechanism.
5 3) All <body>.innerHTML is genereated as an rendering step. If viewed in a 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 6 browser, it will be re-generated from the template, json schema and
7 authored overview content. 7 authored overview content.
8 4) The <body>.innerHTML is also generated by an offline step so that this 8 4) The <body>.innerHTML is also generated by an offline step so that this
9 page may easily be indexed by search engines. 9 page may easily be indexed by search engines.
10 --><html xmlns="http://www.w3.org/1999/xhtml"><head> 10 --><html xmlns="http://www.w3.org/1999/xhtml"><head>
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 </li> 265 </li>
266 </ol> 266 </ol>
267 </li><li> 267 </li><li>
268 <a href="#manifest">Manifest</a> 268 <a href="#manifest">Manifest</a>
269 <ol> 269 <ol>
270 <li style="display: none; "> 270 <li style="display: none; ">
271 <a>h3Name</a> 271 <a>h3Name</a>
272 </li> 272 </li>
273 </ol> 273 </ol>
274 </li><li> 274 </li><li>
275 <a href="#handling_speech_events">Handling Speech Events</a> 275 <a href="#handling_speech_events">Handling speech events</a>
276 <ol> 276 <ol>
277 <li style="display: none; "> 277 <li style="display: none; ">
278 <a>h3Name</a> 278 <a>h3Name</a>
279 </li> 279 </li>
280 </ol> 280 </ol>
281 </li> 281 </li>
282 <li> 282 <li>
283 <a href="#apiReference">API reference: chrome.experimental.ttsEn gine</a> 283 <a href="#apiReference">API reference: chrome.experimental.ttsEn gine</a>
284 <ol> 284 <ol>
285 <li style="display: none; "> 285 <li style="display: none; ">
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 <!-- Standard content lead-in for experimental API pages --> 327 <!-- Standard content lead-in for experimental API pages -->
328 <p id="classSummary"> 328 <p id="classSummary">
329 For information on how to use experimental APIs, see the <a href="expe rimental.html">chrome.experimental.* APIs</a> page. 329 For information on how to use experimental APIs, see the <a href="expe rimental.html">chrome.experimental.* APIs</a> page.
330 </p> 330 </p>
331 331
332 <!-- STATIC CONTENT PLACEHOLDER --> 332 <!-- STATIC CONTENT PLACEHOLDER -->
333 <div id="static"><p id="classSummary"> 333 <div id="static"><p id="classSummary">
334 Use the <code>chrome.experimental.ttsEngine</code> module to 334 Use the <code>chrome.experimental.ttsEngine</code> module to
335 implement a text-to-speech (TTS) engine using an extension. If your 335 implement a text-to-speech (TTS) engine using an extension. If your
336 extension registers using this API, it will receive events containing 336 extension registers using this API, it will receive events containing
337 the intended utterance and other parameters when any extension or packaged 337 an utterance to be spoken and other parameters when any extension or packaged
338 app uses the 338 app uses the
339 <a href="experimental.tts.html">experimental.tts</a> 339 <a href="experimental.tts.html">experimental.tts</a>
340 module to generate speech. Your extension can then use any available 340 module to generate speech. Your extension can then use any available
341 web technology to synthesize and output the speech, and send events back 341 web technology to synthesize and output the speech, and send events back
342 to the calling function to report the status. 342 to the calling function to report the status.
343 </p> 343 </p>
344 344
345 <p class="note"><b>Give us feedback:</b> If you have suggestions, 345 <p class="note"><b>Give us feedback:</b> If you have suggestions,
346 especially changes that should be made before stabilizing the first 346 especially changes that should be made before stabilizing the first
347 version of this API, please send your ideas to the 347 version of this API, please send your ideas to the
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 ] 389 ]
390 },</b> 390 },</b>
391 "background_page": "background.html", 391 "background_page": "background.html",
392 }</pre> 392 }</pre>
393 393
394 <p>An extension can specify any number of voices.</p> 394 <p>An extension can specify any number of voices.</p>
395 395
396 <p>The <code>voice_name</code> parameter is required. The name should be 396 <p>The <code>voice_name</code> parameter is required. The name should be
397 descriptive enough that it identifies the name of the voice and the 397 descriptive enough that it identifies the name of the voice and the
398 engine used. In the unlikely event that two extensions register voices 398 engine used. In the unlikely event that two extensions register voices
399 with the same name, a client can manually specify the extension id it 399 with the same name, a client can specify the ID of the extension that
400 wants to do the synthesis.</p> 400 should do the synthesis.</p>
401 401
402 <p>The <code>gender</code> parameter is optional. If your voice corresponds 402 <p>The <code>gender</code> parameter is optional. If your voice corresponds
403 to a male or female voice, you can use this parameter to help clients 403 to a male or female voice, you can use this parameter to help clients
404 choose the most appropriate voice for their application.</p> 404 choose the most appropriate voice for their application.</p>
405 405
406 <p>The <code>lang</code> parameter is optional, but highly recommended. 406 <p>The <code>lang</code> parameter is optional, but highly recommended.
407 Almost always, a voice can synthesize speech in just a single language. 407 Almost always, a voice can synthesize speech in just a single language.
408 When an engine supports more than one language, it can easily register a 408 When an engine supports more than one language, it can easily register a
409 separate voice for each language. Under rare circumstances where a single 409 separate voice for each language. Under rare circumstances where a single
410 voice can handle more than one language, it's easiest to just list two 410 voice can handle more than one language, it's easiest to just list two
411 separate voices and handle them using the same logic internally. However, 411 separate voices and handle them using the same logic internally. However,
412 if you want to create a voice that will handle utterances in any language, 412 if you want to create a voice that will handle utterances in any language,
413 leave out the <code>lang</code> parameter from your extension's manifest.</p> 413 leave out the <code>lang</code> parameter from your extension's manifest.</p>
414 414
415 <p>Finally, the <code>event_types</code> parameter is required if the engine can 415 <p>Finally, the <code>event_types</code> parameter is required if the engine can
416 send events to update the client on the progress of speech synthesis. 416 send events to update the client on the progress of speech synthesis.
417 At a minimum, supporting the <code>'end'</code> event type to indicate 417 At a minimum, supporting the <code>'end'</code> event type to indicate
418 when speech is finished is highly recommend, otherwise it's impossible 418 when speech is finished is highly recommended, otherwise Chrome cannot
419 for Chrome to schedule queued utterances.</p> 419 schedule queued utterances.</p>
420 420
421 <p class="note">If your TTS engine does not support the <code>'end'</code> 421 <p class="note">
422 event type, Chrome will pass the <code>enqueue</code> option to 422 <strong>Note:</strong> If your TTS engine does not support
423 onSpeak, so that your engine can implement its own queuing. However, this is 423 the <code>'end'</code> event type, Chrome cannot queue utterances
424 discouraged because it means that users cannot queue utterances that get 424 because it has no way of knowing when your utterance has finished. To
425 sent to different speech engines.</p> 425 help mitigate this, Chrome passes an additional boolean <code>enqueue</code>
426 option to your engine's onSpeak handler, giving you the option of
427 implementing your own queueing. This is discouraged because then
428 clients are unable to queue utterances that should get spoken by different
429 speech engines.</p>
426 430
427 <p>The possible event types you can send correspond to the event types that 431 <p>The possible event types that you can send correspond to the event types
428 the <code>speak()</code> method receives:</p> 432 that the <code>speak()</code> method receives:</p>
429 433
430 <ul> 434 <ul>
431 <li><code>'start'</code>: the engine has started speaking the utterance. 435 <li><code>'start'</code>: The engine has started speaking the utterance.
432 </li><li><code>'word'</code>: a word boundary was reached. Use 436 </li><li><code>'word'</code>: A word boundary was reached. Use
433 <code>event.charIndex</code> to determine the current speech 437 <code>event.charIndex</code> to determine the current speech
434 position. 438 position.
435 </li><li><code>'sentence'</code>: a sentence boundary was reached. Use 439 </li><li><code>'sentence'</code>: A sentence boundary was reached. Use
436 <code>event.charIndex</code> to determine the current speech 440 <code>event.charIndex</code> to determine the current speech
437 position. 441 position.
438 </li><li><code>'marker'</code>: an SSML marker was reached. Use 442 </li><li><code>'marker'</code>: An SSML marker was reached. Use
439 <code>event.charIndex</code> to determine the current speech 443 <code>event.charIndex</code> to determine the current speech
440 position. 444 position.
441 </li><li><code>'end'</code>: the engine has finished speaking the utterance. 445 </li><li><code>'end'</code>: The engine has finished speaking the utterance.
442 </li><li><code>'error'</code>: An engine-specific error occurred and 446 </li><li><code>'error'</code>: An engine-specific error occurred and
443 this utterance cannot be spoken. 447 this utterance cannot be spoken.
444 Pass more information in <code>event.errorMessage</code>. 448 Pass more information in <code>event.errorMessage</code>.
445 </li></ul> 449 </li></ul>
446 450
447 <p>The <code>'interrupted'</code> and <code>'cancelled'</code> events are 451 <p>The <code>'interrupted'</code> and <code>'cancelled'</code> events are
448 not sent by the speech engine; they are generated automatically by Chrome.</p> 452 not sent by the speech engine; they are generated automatically by Chrome.</p>
449 453
450 <p>The information about your extensions's voices from your manifest 454 <p>Text-to-speech clients can get the voice information from your
451 will be returned to any client that calls <code>getVoices</code>, assuming 455 extension's manifest by calling
452 you've also registered speech event listeners as described below.</p> 456 <a href="experimental.tts.html#method-getVoices">getVoices()</a>,
457 assuming you've registered speech event listeners as described below.</p>
453 458
454 <h2 id="handling_speech_events">Handling Speech Events</h2> 459 <h2 id="handling_speech_events">Handling speech events</h2>
455 460
456 <p>To generate speech at the request of clients, your extension must 461 <p>To generate speech at the request of clients, your extension must
457 register listeners for both <code>onSpeak</code> and <code>onStop</code>, 462 register listeners for both <code>onSpeak</code> and <code>onStop</code>,
458 like this:</p> 463 like this:</p>
459 464
460 <pre>var speakListener = function(utterance, options, sendTtsEvent) { 465 <pre>var speakListener = function(utterance, options, sendTtsEvent) {
461 sendTtsEvent({'event_type': 'start', 'charIndex': 0}) 466 sendTtsEvent({'event_type': 'start', 'charIndex': 0})
462 467
463 // (start speaking) 468 // (start speaking)
464 469
465 sendTtsEvent({'event_type': 'end', 'charIndex': utterance.length}) 470 sendTtsEvent({'event_type': 'end', 'charIndex': utterance.length})
466 }; 471 };
467 472
468 var stopListener = function() { 473 var stopListener = function() {
469 // (stop all speech) 474 // (stop all speech)
470 }; 475 };
471 476
472 chrome.experimental.ttsEngine.onSpeak.addListener(speakListener); 477 chrome.experimental.ttsEngine.onSpeak.addListener(speakListener);
473 chrome.experimental.ttsEngine.onStop.addListener(stopListener);</pre> 478 chrome.experimental.ttsEngine.onStop.addListener(stopListener);</pre>
474 479
475 <p class="warning">If an extension does not register listeners for both 480 <p class="warning">
481 <b>Important:</b>
482 If your extension does not register listeners for both
476 <code>onSpeak</code> and <code>onStop</code>, it will not intercept any 483 <code>onSpeak</code> and <code>onStop</code>, it will not intercept any
477 speech calls, regardless of what is in the manifest.</p> 484 speech calls, regardless of what is in the manifest.</p>
478 485
479 <p>The decision of whether or not to send a given speech request to an 486 <p>The decision of whether or not to send a given speech request to an
480 extension is based solely on whether the extension supports the given voice 487 extension is based solely on whether the extension supports the given voice
481 parameters in its manifest and has registered listeners 488 parameters in its manifest and has registered listeners
482 for <code>onSpeak</code> and <code>onStop</code>. In other words, 489 for <code>onSpeak</code> and <code>onStop</code>. In other words,
483 there's no way for an extension to receive a speech request and 490 there's no way for an extension to receive a speech request and
484 dynamically decide whether to handle it or not.</p> 491 dynamically decide whether to handle it.</p>
485 </div> 492 </div>
486 493
487 <!-- API PAGE --> 494 <!-- API PAGE -->
488 <div class="apiPage"> 495 <div class="apiPage">
489 <a name="apiReference"></a> 496 <a name="apiReference"></a>
490 <h2>API reference: chrome.experimental.ttsEngine</h2> 497 <h2>API reference: chrome.experimental.ttsEngine</h2>
491 498
492 <!-- PROPERTIES --> 499 <!-- PROPERTIES -->
493 <div class="apiGroup" style="display: none; "> 500 <div class="apiGroup" style="display: none; ">
494 <a name="properties"></a> 501 <a name="properties"></a>
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 <a name="event-onSpeak"></a> 646 <a name="event-onSpeak"></a>
640 <h4>onSpeak</h4> 647 <h4>onSpeak</h4>
641 648
642 <div class="summary"> 649 <div class="summary">
643 <!-- Note: intentionally longer 80 columns --> 650 <!-- Note: intentionally longer 80 columns -->
644 <span class="subdued">chrome.experimental.ttsEngine.</span><span >onSpeak</span><span class="subdued">.addListener</span>(function(<span>string u tterance, object options, function sendTtsEvent</span>) <span class="subdued">{. ..}</span><span></span>)); 651 <span class="subdued">chrome.experimental.ttsEngine.</span><span >onSpeak</span><span class="subdued">.addListener</span>(function(<span>string u tterance, object options, function sendTtsEvent</span>) <span class="subdued">{. ..}</span><span></span>));
645 </div> 652 </div>
646 653
647 <div class="description"> 654 <div class="description">
648 <p class="todo" style="display: none; ">Undocumented.</p> 655 <p class="todo" style="display: none; ">Undocumented.</p>
649 <p>Called when the user makes a call to tts.speak and the option s matches one of the tts_voices from this extension's manifest.</p> 656 <p>Called when the user makes a call to tts.speak() and one of t he voices from this extension's manifest is the first to match the options objec t.</p>
650 657
651 <!-- LISTENER PARAMETERS --> 658 <!-- LISTENER PARAMETERS -->
652 <div> 659 <div>
653 <h4>Listener parameters</h4> 660 <h4>Listener parameters</h4>
654 <dl> 661 <dl>
655 <div> 662 <div>
656 <div> 663 <div>
657 <dt> 664 <dt>
658 <var>utterance</var> 665 <var>utterance</var>
659 <em> 666 <em>
(...skipping 16 matching lines...) Expand all
676 </span> 683 </span>
677 </span> 684 </span>
678 ) 685 )
679 </div> 686 </div>
680 687
681 </em> 688 </em>
682 </dt> 689 </dt>
683 <dd class="todo" style="display: none; "> 690 <dd class="todo" style="display: none; ">
684 Undocumented. 691 Undocumented.
685 </dd> 692 </dd>
686 <dd>The text to speak. This may include SSML, so if your engine does n ot support SSML, you should strip out all XML markup and synthesize only the und erlying text content. This is guaranteed to be no more than 32,768 characters. I f this engine does not support speaking that many characters at a time, the utte rance should be split into smaller chunks and queued internally without returnin g an error.</dd> 693 <dd>The text to speak, specified as either plain text or an SSML docum ent. If your engine does not support SSML, you should strip out all XML markup a nd synthesize only the underlying text content. The value of this parameter is g uaranteed to be no more than 32,768 characters. If this engine does not support speaking that many characters at a time, the utterance should be split into smal ler chunks and queued internally without returning an error.</dd>
687 <dd style="display: none; "> 694 <dd style="display: none; ">
688 This parameter was added in version 695 This parameter was added in version
689 <b><span></span></b>. 696 <b><span></span></b>.
690 You must omit this parameter in earlier versions, 697 You must omit this parameter in earlier versions,
691 and you may omit it in any version. If you require this 698 and you may omit it in any version. If you require this
692 parameter, the manifest key 699 parameter, the manifest key
693 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a> 700 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a>
694 can ensure that your extension won't be run in an earlier browser ve rsion. 701 can ensure that your extension won't be run in an earlier browser ve rsion.
695 </dd> 702 </dd>
696 703
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 </span> 751 </span>
745 </span> 752 </span>
746 ) 753 )
747 </div> 754 </div>
748 755
749 </em> 756 </em>
750 </dt> 757 </dt>
751 <dd class="todo" style="display: none; "> 758 <dd class="todo" style="display: none; ">
752 Undocumented. 759 Undocumented.
753 </dd> 760 </dd>
754 <dd>The speak options.</dd> 761 <dd>Options specified to the tts.speak() method.</dd>
755 <dd style="display: none; "> 762 <dd style="display: none; ">
756 This parameter was added in version 763 This parameter was added in version
757 <b><span></span></b>. 764 <b><span></span></b>.
758 You must omit this parameter in earlier versions, 765 You must omit this parameter in earlier versions,
759 and you may omit it in any version. If you require this 766 and you may omit it in any version. If you require this
760 parameter, the manifest key 767 parameter, the manifest key
761 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a> 768 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a>
762 can ensure that your extension won't be run in an earlier browser ve rsion. 769 can ensure that your extension won't be run in an earlier browser ve rsion.
763 </dd> 770 </dd>
764 771
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 </span> 864 </span>
858 </span> 865 </span>
859 ) 866 )
860 </div> 867 </div>
861 868
862 </em> 869 </em>
863 </dt> 870 </dt>
864 <dd class="todo" style="display: none; "> 871 <dd class="todo" style="display: none; ">
865 Undocumented. 872 Undocumented.
866 </dd> 873 </dd>
867 <dd>The language to be used for synthesis, in the form <language>-<reg ion>, e.g. en-US, en-GB, fr-CA, zh-CN, etc.</region></language></dd> 874 <dd>The language to be used for synthesis, in the form <em>language</e m>-<em>region</em>. Examples: 'en', 'en-US', 'en-GB', 'zh-CN'.</dd>
868 <dd style="display: none; "> 875 <dd style="display: none; ">
869 This parameter was added in version 876 This parameter was added in version
870 <b><span></span></b>. 877 <b><span></span></b>.
871 You must omit this parameter in earlier versions, 878 You must omit this parameter in earlier versions,
872 and you may omit it in any version. If you require this 879 and you may omit it in any version. If you require this
873 parameter, the manifest key 880 parameter, the manifest key
874 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a> 881 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a>
875 can ensure that your extension won't be run in an earlier browser ve rsion. 882 can ensure that your extension won't be run in an earlier browser ve rsion.
876 </dd> 883 </dd>
877 884
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 </span> 1000 </span>
994 </span> 1001 </span>
995 ) 1002 )
996 </div> 1003 </div>
997 1004
998 </em> 1005 </em>
999 </dt> 1006 </dt>
1000 <dd class="todo" style="display: none; "> 1007 <dd class="todo" style="display: none; ">
1001 Undocumented. 1008 Undocumented.
1002 </dd> 1009 </dd>
1003 <dd>Speaking rate relative to the default rate for this voice. 1.0 is the default rate, normally around 180 to 220 words per minute, 2.0 would be twic e as fast, and 0.5 would be half as fast. This value is guaranteed to be betwee n 0.1 and 10.0, inclusive. When a voice does not support this full range of rate s, the actual rate should be clipped to the range that is supported without retu rning an error.</dd> 1010 <dd>Speaking rate relative to the default rate for this voice. 1.0 is the default rate, normally around 180 to 220 words per minute. 2.0 is twice as f ast, and 0.5 is half as fast. This value is guaranteed to be between 0.1 and 10. 0, inclusive. When a voice does not support this full range of rates, don't retu rn an error. Instead, clip the rate to the range the voice supports.</dd>
1004 <dd style="display: none; "> 1011 <dd style="display: none; ">
1005 This parameter was added in version 1012 This parameter was added in version
1006 <b><span></span></b>. 1013 <b><span></span></b>.
1007 You must omit this parameter in earlier versions, 1014 You must omit this parameter in earlier versions,
1008 and you may omit it in any version. If you require this 1015 and you may omit it in any version. If you require this
1009 parameter, the manifest key 1016 parameter, the manifest key
1010 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a> 1017 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a>
1011 can ensure that your extension won't be run in an earlier browser ve rsion. 1018 can ensure that your extension won't be run in an earlier browser ve rsion.
1012 </dd> 1019 </dd>
1013 1020
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 </span> 1068 </span>
1062 </span> 1069 </span>
1063 ) 1070 )
1064 </div> 1071 </div>
1065 1072
1066 </em> 1073 </em>
1067 </dt> 1074 </dt>
1068 <dd class="todo" style="display: none; "> 1075 <dd class="todo" style="display: none; ">
1069 Undocumented. 1076 Undocumented.
1070 </dd> 1077 </dd>
1071 <dd>Speaking pitch between 0 and 2 inclusive, with 0 being lowest and 1 being highest, with 1.0 being the default pitch of this particular voice.</dd> 1078 <dd>Speaking pitch between 0 and 2 inclusive, with 0 being lowest and 2 being highest. 1.0 corresponds to this voice's default pitch.</dd>
1072 <dd style="display: none; "> 1079 <dd style="display: none; ">
1073 This parameter was added in version 1080 This parameter was added in version
1074 <b><span></span></b>. 1081 <b><span></span></b>.
1075 You must omit this parameter in earlier versions, 1082 You must omit this parameter in earlier versions,
1076 and you may omit it in any version. If you require this 1083 and you may omit it in any version. If you require this
1077 parameter, the manifest key 1084 parameter, the manifest key
1078 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a> 1085 <a href="manifest.html#minimum_chrome_version">minimum_chrome_versio n</a>
1079 can ensure that your extension won't be run in an earlier browser ve rsion. 1086 can ensure that your extension won't be run in an earlier browser ve rsion.
1080 </dd> 1087 </dd>
1081 1088
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 _uff=0; 1466 _uff=0;
1460 urchinTracker(); 1467 urchinTracker();
1461 } 1468 }
1462 catch(e) {/* urchinTracker not available. */} 1469 catch(e) {/* urchinTracker not available. */}
1463 </script> 1470 </script>
1464 <!-- end analytics --> 1471 <!-- end analytics -->
1465 </div> 1472 </div>
1466 </div> <!-- /gc-footer --> 1473 </div> <!-- /gc-footer -->
1467 </div> <!-- /gc-container --> 1474 </div> <!-- /gc-container -->
1468 </body></html> 1475 </body></html>
OLDNEW
« no previous file with comments | « chrome/common/extensions/docs/experimental.tts.html ('k') | chrome/common/extensions/docs/static/experimental.tts.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698