Home | History | Annotate | Download | only in WebCoreSupport
      1 /*
      2  * Copyright (C) 2010 Apple Inc. All rights reserved.
      3  * Copyright (C) 2010 Patrick Gansterer <paroga (at) paroga.com>
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  * 1. Redistributions of source code must retain the above copyright
      9  *    notice, this list of conditions and the following disclaimer.
     10  * 2. Redistributions in binary form must reproduce the above copyright
     11  *    notice, this list of conditions and the following disclaimer in the
     12  *    documentation and/or other materials provided with the distribution.
     13  *
     14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "PlatformStrategiesWinCE.h"
     28 
     29 #include "IntSize.h"
     30 #include "Page.h"
     31 #include "PageGroup.h"
     32 #include "PluginDatabase.h"
     33 
     34 #include <wtf/MathExtras.h>
     35 #include <wtf/text/CString.h>
     36 #include <wtf/text/StringConcatenate.h>
     37 
     38 #define UI_STRING(text, description) text
     39 #define UI_STRING_KEY(text, key, description) text
     40 
     41 using namespace WebCore;
     42 
     43 void PlatformStrategiesWinCE::initialize()
     44 {
     45     DEFINE_STATIC_LOCAL(PlatformStrategiesWinCE, platformStrategies, ());
     46 }
     47 
     48 PlatformStrategiesWinCE::PlatformStrategiesWinCE()
     49 {
     50     setPlatformStrategies(this);
     51 }
     52 
     53 CookiesStrategy* PlatformStrategiesWinCE::createCookiesStrategy()
     54 {
     55     return this;
     56 }
     57 
     58 PluginStrategy* PlatformStrategiesWinCE::createPluginStrategy()
     59 {
     60     return this;
     61 }
     62 
     63 LocalizationStrategy* PlatformStrategiesWinCE::createLocalizationStrategy()
     64 {
     65     return this;
     66 }
     67 
     68 VisitedLinkStrategy* PlatformStrategiesWinCE::createVisitedLinkStrategy()
     69 {
     70     return this;
     71 }
     72 
     73 void PlatformStrategiesWinCE::notifyCookiesChanged()
     74 {
     75 }
     76 
     77 void PlatformStrategiesWinCE::refreshPlugins()
     78 {
     79     PluginDatabase::installedPlugins()->refresh();
     80 }
     81 
     82 void PlatformStrategiesWinCE::getPluginInfo(const Page*, Vector<PluginInfo>& outPlugins)
     83 {
     84     const Vector<PluginPackage*>& plugins = PluginDatabase::installedPlugins()->plugins();
     85 
     86     outPlugins.resize(plugins.size());
     87 
     88     for (size_t i = 0; i < plugins.size(); ++i) {
     89         PluginPackage* package = plugins[i];
     90 
     91         PluginInfo info;
     92         info.name = package->name();
     93         info.file = package->fileName();
     94         info.desc = package->description();
     95 
     96         const MIMEToDescriptionsMap& mimeToDescriptions = package->mimeToDescriptions();
     97 
     98         info.mimes.reserveCapacity(mimeToDescriptions.size());
     99 
    100         MIMEToDescriptionsMap::const_iterator end = mimeToDescriptions.end();
    101         for (MIMEToDescriptionsMap::const_iterator it = mimeToDescriptions.begin(); it != end; ++it) {
    102             MimeClassInfo mime;
    103 
    104             mime.type = it->first;
    105             mime.desc = it->second;
    106             mime.extensions = package->mimeToExtensions().get(mime.type);
    107 
    108             info.mimes.append(mime);
    109         }
    110 
    111         outPlugins[i] = info;
    112     }
    113 }
    114 
    115 // LocalizationStrategy
    116 
    117 String PlatformStrategiesWinCE::searchableIndexIntroduction()
    118 {
    119     return UI_STRING("This is a searchable index. Enter search keywords: ", "text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'");
    120 }
    121 
    122 String PlatformStrategiesWinCE::submitButtonDefaultLabel()
    123 {
    124     return UI_STRING("Submit", "default label for Submit buttons in forms on web pages");
    125 }
    126 
    127 String PlatformStrategiesWinCE::inputElementAltText()
    128 {
    129     return UI_STRING_KEY("Submit", "Submit (input element)", "alt text for <input> elements with no alt, title, or value");
    130 }
    131 
    132 String PlatformStrategiesWinCE::resetButtonDefaultLabel()
    133 {
    134     return UI_STRING("Reset", "default label for Reset buttons in forms on web pages");
    135 }
    136 
    137 String PlatformStrategiesWinCE::fileButtonChooseFileLabel()
    138 {
    139     return UI_STRING("Choose File", "title for file button used in HTML forms");
    140 }
    141 
    142 String PlatformStrategiesWinCE::fileButtonNoFileSelectedLabel()
    143 {
    144     return UI_STRING("no file selected", "text to display in file button used in HTML forms when no file is selected");
    145 }
    146 
    147 String PlatformStrategiesWinCE::defaultDetailsSummaryText()
    148 {
    149     return UI_STRING("Details", "text to display in <details> tag when it has no <summary> child");
    150 }
    151 
    152 String PlatformStrategiesWinCE::contextMenuItemTagOpenLinkInNewWindow()
    153 {
    154     return UI_STRING("Open Link in New Window", "Open in New Window context menu item");
    155 }
    156 
    157 String PlatformStrategiesWinCE::contextMenuItemTagDownloadLinkToDisk()
    158 {
    159     return UI_STRING("Download Linked File", "Download Linked File context menu item");
    160 }
    161 
    162 String PlatformStrategiesWinCE::contextMenuItemTagCopyLinkToClipboard()
    163 {
    164     return UI_STRING("Copy Link", "Copy Link context menu item");
    165 }
    166 
    167 String PlatformStrategiesWinCE::contextMenuItemTagOpenImageInNewWindow()
    168 {
    169     return UI_STRING("Open Image in New Window", "Open Image in New Window context menu item");
    170 }
    171 
    172 String PlatformStrategiesWinCE::contextMenuItemTagDownloadImageToDisk()
    173 {
    174     return UI_STRING("Download Image", "Download Image context menu item");
    175 }
    176 
    177 String PlatformStrategiesWinCE::contextMenuItemTagCopyImageToClipboard()
    178 {
    179     return UI_STRING("Copy Image", "Copy Image context menu item");
    180 }
    181 
    182 String PlatformStrategiesWinCE::contextMenuItemTagOpenVideoInNewWindow()
    183 {
    184     return UI_STRING("Open Video in New Window", "Open Video in New Window context menu item");
    185 }
    186 
    187 String PlatformStrategiesWinCE::contextMenuItemTagOpenAudioInNewWindow()
    188 {
    189     return UI_STRING("Open Audio in New Window", "Open Audio in New Window context menu item");
    190 }
    191 
    192 String PlatformStrategiesWinCE::contextMenuItemTagCopyVideoLinkToClipboard()
    193 {
    194     return UI_STRING("Copy Video Address", "Copy Video Address Location context menu item");
    195 }
    196 
    197 String PlatformStrategiesWinCE::contextMenuItemTagCopyAudioLinkToClipboard()
    198 {
    199     return UI_STRING("Copy Audio Address", "Copy Audio Address Location context menu item");
    200 }
    201 
    202 String PlatformStrategiesWinCE::contextMenuItemTagToggleMediaControls()
    203 {
    204     return UI_STRING("Controls", "Media Controls context menu item");
    205 }
    206 
    207 String PlatformStrategiesWinCE::contextMenuItemTagToggleMediaLoop()
    208 {
    209     return UI_STRING("Loop", "Media Loop context menu item");
    210 }
    211 
    212 String PlatformStrategiesWinCE::contextMenuItemTagEnterVideoFullscreen()
    213 {
    214     return UI_STRING("Enter Fullscreen", "Video Enter Fullscreen context menu item");
    215 }
    216 
    217 String PlatformStrategiesWinCE::contextMenuItemTagMediaPlay()
    218 {
    219     return UI_STRING("Play", "Media Play context menu item");
    220 }
    221 
    222 String PlatformStrategiesWinCE::contextMenuItemTagMediaPause()
    223 {
    224     return UI_STRING("Pause", "Media Pause context menu item");
    225 }
    226 
    227 String PlatformStrategiesWinCE::contextMenuItemTagMediaMute()
    228 {
    229     return UI_STRING("Mute", "Media Mute context menu item");
    230 }
    231 
    232 String PlatformStrategiesWinCE::contextMenuItemTagOpenFrameInNewWindow()
    233 {
    234     return UI_STRING("Open Frame in New Window", "Open Frame in New Window context menu item");
    235 }
    236 
    237 String PlatformStrategiesWinCE::contextMenuItemTagCopy()
    238 {
    239     return UI_STRING("Copy", "Copy context menu item");
    240 }
    241 
    242 String PlatformStrategiesWinCE::contextMenuItemTagGoBack()
    243 {
    244     return UI_STRING("Back", "Back context menu item");
    245 }
    246 
    247 String PlatformStrategiesWinCE::contextMenuItemTagGoForward()
    248 {
    249     return UI_STRING("Forward", "Forward context menu item");
    250 }
    251 
    252 String PlatformStrategiesWinCE::contextMenuItemTagStop()
    253 {
    254     return UI_STRING("Stop", "Stop context menu item");
    255 }
    256 
    257 String PlatformStrategiesWinCE::contextMenuItemTagReload()
    258 {
    259     return UI_STRING("Reload", "Reload context menu item");
    260 }
    261 
    262 String PlatformStrategiesWinCE::contextMenuItemTagCut()
    263 {
    264     return UI_STRING("Cut", "Cut context menu item");
    265 }
    266 
    267 String PlatformStrategiesWinCE::contextMenuItemTagPaste()
    268 {
    269     return UI_STRING("Paste", "Paste context menu item");
    270 }
    271 
    272 String PlatformStrategiesWinCE::contextMenuItemTagNoGuessesFound()
    273 {
    274     return UI_STRING("No Guesses Found", "No Guesses Found context menu item");
    275 }
    276 
    277 String PlatformStrategiesWinCE::contextMenuItemTagIgnoreSpelling()
    278 {
    279     return UI_STRING("Ignore Spelling", "Ignore Spelling context menu item");
    280 }
    281 
    282 String PlatformStrategiesWinCE::contextMenuItemTagLearnSpelling()
    283 {
    284     return UI_STRING("Learn Spelling", "Learn Spelling context menu item");
    285 }
    286 
    287 String PlatformStrategiesWinCE::contextMenuItemTagSearchWeb()
    288 {
    289     return UI_STRING("Search with Google", "Search in Google context menu item");
    290 }
    291 
    292 String PlatformStrategiesWinCE::contextMenuItemTagLookUpInDictionary(const String&)
    293 {
    294     return UI_STRING("Look Up in Dictionary", "Look Up in Dictionary context menu item");
    295 }
    296 
    297 String PlatformStrategiesWinCE::contextMenuItemTagOpenLink()
    298 {
    299     return UI_STRING("Open Link", "Open Link context menu item");
    300 }
    301 
    302 String PlatformStrategiesWinCE::contextMenuItemTagIgnoreGrammar()
    303 {
    304     return UI_STRING("Ignore Grammar", "Ignore Grammar context menu item");
    305 }
    306 
    307 String PlatformStrategiesWinCE::contextMenuItemTagSpellingMenu()
    308 {
    309     return UI_STRING("Spelling and Grammar", "Spelling and Grammar context sub-menu item");
    310 }
    311 
    312 String PlatformStrategiesWinCE::contextMenuItemTagCheckSpelling()
    313 {
    314     return UI_STRING("Check Document Now", "Check spelling context menu item");
    315 }
    316 
    317 String PlatformStrategiesWinCE::contextMenuItemTagCheckSpellingWhileTyping()
    318 {
    319     return UI_STRING("Check Spelling While Typing", "Check spelling while typing context menu item");
    320 }
    321 
    322 String PlatformStrategiesWinCE::contextMenuItemTagCheckGrammarWithSpelling()
    323 {
    324     return UI_STRING("Check Grammar With Spelling", "Check grammar with spelling context menu item");
    325 }
    326 
    327 String PlatformStrategiesWinCE::contextMenuItemTagFontMenu()
    328 {
    329     return UI_STRING("Font", "Font context sub-menu item");
    330 }
    331 
    332 String PlatformStrategiesWinCE::contextMenuItemTagBold()
    333 {
    334     return UI_STRING("Bold", "Bold context menu item");
    335 }
    336 
    337 String PlatformStrategiesWinCE::contextMenuItemTagItalic()
    338 {
    339     return UI_STRING("Italic", "Italic context menu item");
    340 }
    341 
    342 String PlatformStrategiesWinCE::contextMenuItemTagUnderline()
    343 {
    344     return UI_STRING("Underline", "Underline context menu item");
    345 }
    346 
    347 String PlatformStrategiesWinCE::contextMenuItemTagOutline()
    348 {
    349     return UI_STRING("Outline", "Outline context menu item");
    350 }
    351 
    352 String PlatformStrategiesWinCE::contextMenuItemTagWritingDirectionMenu()
    353 {
    354     return UI_STRING("Paragraph Direction", "Paragraph direction context sub-menu item");
    355 }
    356 
    357 String PlatformStrategiesWinCE::contextMenuItemTagTextDirectionMenu()
    358 {
    359     return UI_STRING("Selection Direction", "Selection direction context sub-menu item");
    360 }
    361 
    362 String PlatformStrategiesWinCE::contextMenuItemTagDefaultDirection()
    363 {
    364     return UI_STRING("Default", "Default writing direction context menu item");
    365 }
    366 
    367 String PlatformStrategiesWinCE::contextMenuItemTagLeftToRight()
    368 {
    369     return UI_STRING("Left to Right", "Left to Right context menu item");
    370 }
    371 
    372 String PlatformStrategiesWinCE::contextMenuItemTagRightToLeft()
    373 {
    374     return UI_STRING("Right to Left", "Right to Left context menu item");
    375 }
    376 
    377 String PlatformStrategiesWinCE::contextMenuItemTagShowSpellingPanel(bool show)
    378 {
    379     if (show)
    380         return UI_STRING("Show Spelling and Grammar", "menu item title");
    381     return UI_STRING("Hide Spelling and Grammar", "menu item title");
    382 }
    383 
    384 String PlatformStrategiesWinCE::contextMenuItemTagInspectElement()
    385 {
    386     return UI_STRING("Inspect Element", "Inspect Element context menu item");
    387 }
    388 
    389 String PlatformStrategiesWinCE::searchMenuNoRecentSearchesText()
    390 {
    391     return UI_STRING("No recent searches", "Label for only item in menu that appears when clicking on the search field image, when no searches have been performed");
    392 }
    393 
    394 String PlatformStrategiesWinCE::searchMenuRecentSearchesText()
    395 {
    396     return UI_STRING("Recent Searches", "label for first item in the menu that appears when clicking on the search field image, used as embedded menu title");
    397 }
    398 
    399 String PlatformStrategiesWinCE::searchMenuClearRecentSearchesText()
    400 {
    401     return UI_STRING("Clear Recent Searches", "menu item in Recent Searches menu that empties menu's contents");
    402 }
    403 
    404 String PlatformStrategiesWinCE::AXWebAreaText()
    405 {
    406     return UI_STRING("web area", "accessibility role description for web area");
    407 }
    408 
    409 String PlatformStrategiesWinCE::AXLinkText()
    410 {
    411     return UI_STRING("link", "accessibility role description for link");
    412 }
    413 
    414 String PlatformStrategiesWinCE::AXListMarkerText()
    415 {
    416     return UI_STRING("list marker", "accessibility role description for list marker");
    417 }
    418 
    419 String PlatformStrategiesWinCE::AXImageMapText()
    420 {
    421     return UI_STRING("image map", "accessibility role description for image map");
    422 }
    423 
    424 String PlatformStrategiesWinCE::AXHeadingText()
    425 {
    426     return UI_STRING("heading", "accessibility role description for headings");
    427 }
    428 
    429 String PlatformStrategiesWinCE::AXDefinitionListTermText()
    430 {
    431     return UI_STRING("term", "term word of a definition");
    432 }
    433 
    434 String PlatformStrategiesWinCE::AXDefinitionListDefinitionText()
    435 {
    436     return UI_STRING("definition", "definition phrase");
    437 }
    438 
    439 String PlatformStrategiesWinCE::AXButtonActionVerb()
    440 {
    441     return UI_STRING("press", "Verb stating the action that will occur when a button is pressed, as used by accessibility");
    442 }
    443 
    444 String PlatformStrategiesWinCE::AXRadioButtonActionVerb()
    445 {
    446     return UI_STRING("select", "Verb stating the action that will occur when a radio button is clicked, as used by accessibility");
    447 }
    448 
    449 String PlatformStrategiesWinCE::AXTextFieldActionVerb()
    450 {
    451     return UI_STRING("activate", "Verb stating the action that will occur when a text field is selected, as used by accessibility");
    452 }
    453 
    454 String PlatformStrategiesWinCE::AXCheckedCheckBoxActionVerb()
    455 {
    456     return UI_STRING("uncheck", "Verb stating the action that will occur when a checked checkbox is clicked, as used by accessibility");
    457 }
    458 
    459 String PlatformStrategiesWinCE::AXUncheckedCheckBoxActionVerb()
    460 {
    461     return UI_STRING("check", "Verb stating the action that will occur when an unchecked checkbox is clicked, as used by accessibility");
    462 }
    463 
    464 String PlatformStrategiesWinCE::AXLinkActionVerb()
    465 {
    466     return UI_STRING("jump", "Verb stating the action that will occur when a link is clicked, as used by accessibility");
    467 }
    468 
    469 String PlatformStrategiesWinCE::AXMenuListActionVerb()
    470 {
    471     return UI_STRING("open", "Verb stating the action that will occur when a select element is clicked, as used by accessibility");
    472 }
    473 
    474 String PlatformStrategiesWinCE::AXMenuListPopupActionVerb()
    475 {
    476     return UI_STRING_KEY("press", "press (select element)", "Verb stating the action that will occur when a select element's popup list is clicked, as used by accessibility");
    477 }
    478 
    479 String PlatformStrategiesWinCE::unknownFileSizeText()
    480 {
    481     return UI_STRING("Unknown", "Unknown filesize FTP directory listing item");
    482 }
    483 
    484 String PlatformStrategiesWinCE::uploadFileText()
    485 {
    486     return UI_STRING("Upload file", "(Windows) Form submit file upload dialog title");
    487 }
    488 
    489 String PlatformStrategiesWinCE::allFilesText()
    490 {
    491     return UI_STRING("All Files", "(Windows) Form submit file upload all files pop-up");
    492 }
    493 
    494 String PlatformStrategiesWinCE::missingPluginText()
    495 {
    496     return UI_STRING("Missing Plug-in", "Label text to be used when a plugin is missing");
    497 }
    498 
    499 String PlatformStrategiesWinCE::crashedPluginText()
    500 {
    501     return UI_STRING("Plug-in Failure", "Label text to be used if plugin host process has crashed");
    502 }
    503 
    504 String PlatformStrategiesWinCE::imageTitle(const String& filename, const IntSize& size)
    505 {
    506     return UI_STRING(makeString(filename, ' ', String::number(size.width()), "\xC3\x97", String::number(size.height()), " pixels"),
    507                      "window title for a standalone image (uses multiplication symbol, not x)");
    508 }
    509 
    510 String PlatformStrategiesWinCE::multipleFileUploadText(unsigned numberOfFiles)
    511 {
    512     return UI_STRING(makeString(String::number(numberOfFiles), " files"), "Label to describe the number of files selected in a file upload control that allows multiple files");
    513 }
    514 
    515 String PlatformStrategiesWinCE::mediaElementLoadingStateText()
    516 {
    517     return UI_STRING("Loading...", "Media controller status message when the media is loading");
    518 }
    519 
    520 String PlatformStrategiesWinCE::mediaElementLiveBroadcastStateText()
    521 {
    522     return UI_STRING("Live Broadcast", "Media controller status message when watching a live broadcast");
    523 }
    524 
    525 String PlatformStrategiesWinCE::localizedMediaControlElementString(const String& name)
    526 {
    527     if (name == "AudioElement")
    528         return UI_STRING("audio element controller", "accessibility role description for audio element controller");
    529     if (name == "VideoElement")
    530         return UI_STRING("video element controller", "accessibility role description for video element controller");
    531     if (name == "MuteButton")
    532         return UI_STRING("mute", "accessibility role description for mute button");
    533     if (name == "UnMuteButton")
    534         return UI_STRING("unmute", "accessibility role description for turn mute off button");
    535     if (name == "PlayButton")
    536         return UI_STRING("play", "accessibility role description for play button");
    537     if (name == "PauseButton")
    538         return UI_STRING("pause", "accessibility role description for pause button");
    539     if (name == "Slider")
    540         return UI_STRING("movie time", "accessibility role description for timeline slider");
    541     if (name == "SliderThumb")
    542         return UI_STRING("timeline slider thumb", "accessibility role description for timeline thumb");
    543     if (name == "RewindButton")
    544         return UI_STRING("back 30 seconds", "accessibility role description for seek back 30 seconds button");
    545     if (name == "ReturnToRealtimeButton")
    546         return UI_STRING("return to realtime", "accessibility role description for return to real time button");
    547     if (name == "CurrentTimeDisplay")
    548         return UI_STRING("elapsed time", "accessibility role description for elapsed time display");
    549     if (name == "TimeRemainingDisplay")
    550         return UI_STRING("remaining time", "accessibility role description for time remaining display");
    551     if (name == "StatusDisplay")
    552         return UI_STRING("status", "accessibility role description for movie status");
    553     if (name == "FullscreenButton")
    554         return UI_STRING("fullscreen", "accessibility role description for enter fullscreen button");
    555     if (name == "SeekForwardButton")
    556         return UI_STRING("fast forward", "accessibility role description for fast forward button");
    557     if (name == "SeekBackButton")
    558         return UI_STRING("fast reverse", "accessibility role description for fast reverse button");
    559     if (name == "ShowClosedCaptionsButton")
    560         return UI_STRING("show closed captions", "accessibility role description for show closed captions button");
    561     if (name == "HideClosedCaptionsButton")
    562         return UI_STRING("hide closed captions", "accessibility role description for hide closed captions button");
    563 
    564     ASSERT_NOT_REACHED();
    565     return String();
    566 }
    567 
    568 String PlatformStrategiesWinCE::localizedMediaControlElementHelpText(const String& name)
    569 {
    570     if (name == "AudioElement")
    571         return UI_STRING("audio element playback controls and status display", "accessibility role description for audio element controller");
    572     if (name == "VideoElement")
    573         return UI_STRING("video element playback controls and status display", "accessibility role description for video element controller");
    574     if (name == "MuteButton")
    575         return UI_STRING("mute audio tracks", "accessibility help text for mute button");
    576     if (name == "UnMuteButton")
    577         return UI_STRING("unmute audio tracks", "accessibility help text for un mute button");
    578     if (name == "PlayButton")
    579         return UI_STRING("begin playback", "accessibility help text for play button");
    580     if (name == "PauseButton")
    581         return UI_STRING("pause playback", "accessibility help text for pause button");
    582     if (name == "Slider")
    583         return UI_STRING("movie time scrubber", "accessibility help text for timeline slider");
    584     if (name == "SliderThumb")
    585         return UI_STRING("movie time scrubber thumb", "accessibility help text for timeline slider thumb");
    586     if (name == "RewindButton")
    587         return UI_STRING("seek movie back 30 seconds", "accessibility help text for jump back 30 seconds button");
    588     if (name == "ReturnToRealtimeButton")
    589         return UI_STRING("return streaming movie to real time", "accessibility help text for return streaming movie to real time button");
    590     if (name == "CurrentTimeDisplay")
    591         return UI_STRING("current movie time in seconds", "accessibility help text for elapsed time display");
    592     if (name == "TimeRemainingDisplay")
    593         return UI_STRING("number of seconds of movie remaining", "accessibility help text for remaining time display");
    594     if (name == "StatusDisplay")
    595         return UI_STRING("current movie status", "accessibility help text for movie status display");
    596     if (name == "SeekBackButton")
    597         return UI_STRING("seek quickly back", "accessibility help text for fast rewind button");
    598     if (name == "SeekForwardButton")
    599         return UI_STRING("seek quickly forward", "accessibility help text for fast forward button");
    600     if (name == "FullscreenButton")
    601         return UI_STRING("Play movie in fullscreen mode", "accessibility help text for enter fullscreen button");
    602     if (name == "ShowClosedCaptionsButton")
    603         return UI_STRING("start displaying closed captions", "accessibility help text for show closed captions button");
    604     if (name == "HideClosedCaptionsButton")
    605         return UI_STRING("stop displaying closed captions", "accessibility help text for hide closed captions button");
    606 
    607     ASSERT_NOT_REACHED();
    608     return String();
    609 }
    610 
    611 String PlatformStrategiesWinCE::localizedMediaTimeDescription(float time)
    612 {
    613     if (!isfinite(time))
    614         return UI_STRING("indefinite time", "accessibility help text for an indefinite media controller time value");
    615 
    616     int seconds = (int)fabsf(time);
    617     int days = seconds / (60 * 60 * 24);
    618     int hours = seconds / (60 * 60);
    619     int minutes = (seconds / 60) % 60;
    620     seconds %= 60;
    621 
    622     if (days)
    623         return String::format(UI_STRING("%1$d days %2$d hours %3$d minutes %4$d seconds", "accessibility help text for media controller time value >= 1 day"), days, hours, minutes, seconds);
    624 
    625     if (hours)
    626         return String::format(UI_STRING("%1$d hours %2$d minutes %3$d seconds", "accessibility help text for media controller time value >= 60 minutes"), hours, minutes, seconds);
    627 
    628     if (minutes)
    629         return String::format(UI_STRING("%1$d minutes %2$d seconds", "accessibility help text for media controller time value >= 60 seconds"), minutes, seconds);
    630 
    631     return String::format(UI_STRING("%1$d seconds", "accessibility help text for media controller time value < 60 seconds"), seconds);
    632 }
    633 
    634 String PlatformStrategiesWinCE::validationMessageValueMissingText()
    635 {
    636     return UI_STRING("value missing", "Validation message for required form control elements that have no value");
    637 }
    638 
    639 String PlatformStrategiesWinCE::validationMessageTypeMismatchText()
    640 {
    641     return UI_STRING("type mismatch", "Validation message for input form controls with a value not matching type");
    642 }
    643 
    644 String PlatformStrategiesWinCE::validationMessagePatternMismatchText()
    645 {
    646     return UI_STRING("pattern mismatch", "Validation message for input form controls requiring a constrained value according to pattern");
    647 }
    648 
    649 String PlatformStrategiesWinCE::validationMessageTooLongText()
    650 {
    651     return UI_STRING("too long", "Validation message for form control elements with a value longer than maximum allowed length");
    652 }
    653 
    654 String PlatformStrategiesWinCE::validationMessageRangeUnderflowText()
    655 {
    656     return UI_STRING("range underflow", "Validation message for input form controls with value lower than allowed minimum");
    657 }
    658 
    659 String PlatformStrategiesWinCE::validationMessageRangeOverflowText()
    660 {
    661     return UI_STRING("range overflow", "Validation message for input form controls with value higher than allowed maximum");
    662 }
    663 
    664 String PlatformStrategiesWinCE::validationMessageStepMismatchText()
    665 {
    666     return UI_STRING("step mismatch", "Validation message for input form controls with value not respecting the step attribute");
    667 }
    668 
    669 bool PlatformStrategiesWinCE::isLinkVisited(Page* page, LinkHash hash)
    670 {
    671     return page->group().isLinkVisited(hash);
    672 }
    673 
    674 void PlatformStrategiesWinCE::addVisitedLink(Page* page, LinkHash hash)
    675 {
    676     page->group().addVisitedLinkHash(hash);
    677 }
    678