1/* 2 * Copyright (C) 2010 Apple Inc. All rights reserved. 3 * Copyright (C) 2010 Patrick Gansterer <paroga@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 41using namespace WebCore; 42 43void PlatformStrategiesWinCE::initialize() 44{ 45 DEFINE_STATIC_LOCAL(PlatformStrategiesWinCE, platformStrategies, ()); 46} 47 48PlatformStrategiesWinCE::PlatformStrategiesWinCE() 49{ 50 setPlatformStrategies(this); 51} 52 53CookiesStrategy* PlatformStrategiesWinCE::createCookiesStrategy() 54{ 55 return this; 56} 57 58PluginStrategy* PlatformStrategiesWinCE::createPluginStrategy() 59{ 60 return this; 61} 62 63LocalizationStrategy* PlatformStrategiesWinCE::createLocalizationStrategy() 64{ 65 return this; 66} 67 68VisitedLinkStrategy* PlatformStrategiesWinCE::createVisitedLinkStrategy() 69{ 70 return this; 71} 72 73void PlatformStrategiesWinCE::notifyCookiesChanged() 74{ 75} 76 77void PlatformStrategiesWinCE::refreshPlugins() 78{ 79 PluginDatabase::installedPlugins()->refresh(); 80} 81 82void 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 117String 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 122String PlatformStrategiesWinCE::submitButtonDefaultLabel() 123{ 124 return UI_STRING("Submit", "default label for Submit buttons in forms on web pages"); 125} 126 127String 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 132String PlatformStrategiesWinCE::resetButtonDefaultLabel() 133{ 134 return UI_STRING("Reset", "default label for Reset buttons in forms on web pages"); 135} 136 137String PlatformStrategiesWinCE::fileButtonChooseFileLabel() 138{ 139 return UI_STRING("Choose File", "title for file button used in HTML forms"); 140} 141 142String 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 147String PlatformStrategiesWinCE::defaultDetailsSummaryText() 148{ 149 return UI_STRING("Details", "text to display in <details> tag when it has no <summary> child"); 150} 151 152String PlatformStrategiesWinCE::contextMenuItemTagOpenLinkInNewWindow() 153{ 154 return UI_STRING("Open Link in New Window", "Open in New Window context menu item"); 155} 156 157String PlatformStrategiesWinCE::contextMenuItemTagDownloadLinkToDisk() 158{ 159 return UI_STRING("Download Linked File", "Download Linked File context menu item"); 160} 161 162String PlatformStrategiesWinCE::contextMenuItemTagCopyLinkToClipboard() 163{ 164 return UI_STRING("Copy Link", "Copy Link context menu item"); 165} 166 167String PlatformStrategiesWinCE::contextMenuItemTagOpenImageInNewWindow() 168{ 169 return UI_STRING("Open Image in New Window", "Open Image in New Window context menu item"); 170} 171 172String PlatformStrategiesWinCE::contextMenuItemTagDownloadImageToDisk() 173{ 174 return UI_STRING("Download Image", "Download Image context menu item"); 175} 176 177String PlatformStrategiesWinCE::contextMenuItemTagCopyImageToClipboard() 178{ 179 return UI_STRING("Copy Image", "Copy Image context menu item"); 180} 181 182String PlatformStrategiesWinCE::contextMenuItemTagOpenVideoInNewWindow() 183{ 184 return UI_STRING("Open Video in New Window", "Open Video in New Window context menu item"); 185} 186 187String PlatformStrategiesWinCE::contextMenuItemTagOpenAudioInNewWindow() 188{ 189 return UI_STRING("Open Audio in New Window", "Open Audio in New Window context menu item"); 190} 191 192String PlatformStrategiesWinCE::contextMenuItemTagCopyVideoLinkToClipboard() 193{ 194 return UI_STRING("Copy Video Address", "Copy Video Address Location context menu item"); 195} 196 197String PlatformStrategiesWinCE::contextMenuItemTagCopyAudioLinkToClipboard() 198{ 199 return UI_STRING("Copy Audio Address", "Copy Audio Address Location context menu item"); 200} 201 202String PlatformStrategiesWinCE::contextMenuItemTagToggleMediaControls() 203{ 204 return UI_STRING("Controls", "Media Controls context menu item"); 205} 206 207String PlatformStrategiesWinCE::contextMenuItemTagToggleMediaLoop() 208{ 209 return UI_STRING("Loop", "Media Loop context menu item"); 210} 211 212String PlatformStrategiesWinCE::contextMenuItemTagEnterVideoFullscreen() 213{ 214 return UI_STRING("Enter Fullscreen", "Video Enter Fullscreen context menu item"); 215} 216 217String PlatformStrategiesWinCE::contextMenuItemTagMediaPlay() 218{ 219 return UI_STRING("Play", "Media Play context menu item"); 220} 221 222String PlatformStrategiesWinCE::contextMenuItemTagMediaPause() 223{ 224 return UI_STRING("Pause", "Media Pause context menu item"); 225} 226 227String PlatformStrategiesWinCE::contextMenuItemTagMediaMute() 228{ 229 return UI_STRING("Mute", "Media Mute context menu item"); 230} 231 232String PlatformStrategiesWinCE::contextMenuItemTagOpenFrameInNewWindow() 233{ 234 return UI_STRING("Open Frame in New Window", "Open Frame in New Window context menu item"); 235} 236 237String PlatformStrategiesWinCE::contextMenuItemTagCopy() 238{ 239 return UI_STRING("Copy", "Copy context menu item"); 240} 241 242String PlatformStrategiesWinCE::contextMenuItemTagGoBack() 243{ 244 return UI_STRING("Back", "Back context menu item"); 245} 246 247String PlatformStrategiesWinCE::contextMenuItemTagGoForward() 248{ 249 return UI_STRING("Forward", "Forward context menu item"); 250} 251 252String PlatformStrategiesWinCE::contextMenuItemTagStop() 253{ 254 return UI_STRING("Stop", "Stop context menu item"); 255} 256 257String PlatformStrategiesWinCE::contextMenuItemTagReload() 258{ 259 return UI_STRING("Reload", "Reload context menu item"); 260} 261 262String PlatformStrategiesWinCE::contextMenuItemTagCut() 263{ 264 return UI_STRING("Cut", "Cut context menu item"); 265} 266 267String PlatformStrategiesWinCE::contextMenuItemTagPaste() 268{ 269 return UI_STRING("Paste", "Paste context menu item"); 270} 271 272String PlatformStrategiesWinCE::contextMenuItemTagNoGuessesFound() 273{ 274 return UI_STRING("No Guesses Found", "No Guesses Found context menu item"); 275} 276 277String PlatformStrategiesWinCE::contextMenuItemTagIgnoreSpelling() 278{ 279 return UI_STRING("Ignore Spelling", "Ignore Spelling context menu item"); 280} 281 282String PlatformStrategiesWinCE::contextMenuItemTagLearnSpelling() 283{ 284 return UI_STRING("Learn Spelling", "Learn Spelling context menu item"); 285} 286 287String PlatformStrategiesWinCE::contextMenuItemTagSearchWeb() 288{ 289 return UI_STRING("Search with Google", "Search in Google context menu item"); 290} 291 292String PlatformStrategiesWinCE::contextMenuItemTagLookUpInDictionary(const String&) 293{ 294 return UI_STRING("Look Up in Dictionary", "Look Up in Dictionary context menu item"); 295} 296 297String PlatformStrategiesWinCE::contextMenuItemTagOpenLink() 298{ 299 return UI_STRING("Open Link", "Open Link context menu item"); 300} 301 302String PlatformStrategiesWinCE::contextMenuItemTagIgnoreGrammar() 303{ 304 return UI_STRING("Ignore Grammar", "Ignore Grammar context menu item"); 305} 306 307String PlatformStrategiesWinCE::contextMenuItemTagSpellingMenu() 308{ 309 return UI_STRING("Spelling and Grammar", "Spelling and Grammar context sub-menu item"); 310} 311 312String PlatformStrategiesWinCE::contextMenuItemTagCheckSpelling() 313{ 314 return UI_STRING("Check Document Now", "Check spelling context menu item"); 315} 316 317String PlatformStrategiesWinCE::contextMenuItemTagCheckSpellingWhileTyping() 318{ 319 return UI_STRING("Check Spelling While Typing", "Check spelling while typing context menu item"); 320} 321 322String PlatformStrategiesWinCE::contextMenuItemTagCheckGrammarWithSpelling() 323{ 324 return UI_STRING("Check Grammar With Spelling", "Check grammar with spelling context menu item"); 325} 326 327String PlatformStrategiesWinCE::contextMenuItemTagFontMenu() 328{ 329 return UI_STRING("Font", "Font context sub-menu item"); 330} 331 332String PlatformStrategiesWinCE::contextMenuItemTagBold() 333{ 334 return UI_STRING("Bold", "Bold context menu item"); 335} 336 337String PlatformStrategiesWinCE::contextMenuItemTagItalic() 338{ 339 return UI_STRING("Italic", "Italic context menu item"); 340} 341 342String PlatformStrategiesWinCE::contextMenuItemTagUnderline() 343{ 344 return UI_STRING("Underline", "Underline context menu item"); 345} 346 347String PlatformStrategiesWinCE::contextMenuItemTagOutline() 348{ 349 return UI_STRING("Outline", "Outline context menu item"); 350} 351 352String PlatformStrategiesWinCE::contextMenuItemTagWritingDirectionMenu() 353{ 354 return UI_STRING("Paragraph Direction", "Paragraph direction context sub-menu item"); 355} 356 357String PlatformStrategiesWinCE::contextMenuItemTagTextDirectionMenu() 358{ 359 return UI_STRING("Selection Direction", "Selection direction context sub-menu item"); 360} 361 362String PlatformStrategiesWinCE::contextMenuItemTagDefaultDirection() 363{ 364 return UI_STRING("Default", "Default writing direction context menu item"); 365} 366 367String PlatformStrategiesWinCE::contextMenuItemTagLeftToRight() 368{ 369 return UI_STRING("Left to Right", "Left to Right context menu item"); 370} 371 372String PlatformStrategiesWinCE::contextMenuItemTagRightToLeft() 373{ 374 return UI_STRING("Right to Left", "Right to Left context menu item"); 375} 376 377String 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 384String PlatformStrategiesWinCE::contextMenuItemTagInspectElement() 385{ 386 return UI_STRING("Inspect Element", "Inspect Element context menu item"); 387} 388 389String 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 394String 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 399String PlatformStrategiesWinCE::searchMenuClearRecentSearchesText() 400{ 401 return UI_STRING("Clear Recent Searches", "menu item in Recent Searches menu that empties menu's contents"); 402} 403 404String PlatformStrategiesWinCE::AXWebAreaText() 405{ 406 return UI_STRING("web area", "accessibility role description for web area"); 407} 408 409String PlatformStrategiesWinCE::AXLinkText() 410{ 411 return UI_STRING("link", "accessibility role description for link"); 412} 413 414String PlatformStrategiesWinCE::AXListMarkerText() 415{ 416 return UI_STRING("list marker", "accessibility role description for list marker"); 417} 418 419String PlatformStrategiesWinCE::AXImageMapText() 420{ 421 return UI_STRING("image map", "accessibility role description for image map"); 422} 423 424String PlatformStrategiesWinCE::AXHeadingText() 425{ 426 return UI_STRING("heading", "accessibility role description for headings"); 427} 428 429String PlatformStrategiesWinCE::AXDefinitionListTermText() 430{ 431 return UI_STRING("term", "term word of a definition"); 432} 433 434String PlatformStrategiesWinCE::AXDefinitionListDefinitionText() 435{ 436 return UI_STRING("definition", "definition phrase"); 437} 438 439String 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 444String 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 449String 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 454String 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 459String 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 464String 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 469String 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 474String 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 479String PlatformStrategiesWinCE::unknownFileSizeText() 480{ 481 return UI_STRING("Unknown", "Unknown filesize FTP directory listing item"); 482} 483 484String PlatformStrategiesWinCE::uploadFileText() 485{ 486 return UI_STRING("Upload file", "(Windows) Form submit file upload dialog title"); 487} 488 489String PlatformStrategiesWinCE::allFilesText() 490{ 491 return UI_STRING("All Files", "(Windows) Form submit file upload all files pop-up"); 492} 493 494String PlatformStrategiesWinCE::missingPluginText() 495{ 496 return UI_STRING("Missing Plug-in", "Label text to be used when a plugin is missing"); 497} 498 499String PlatformStrategiesWinCE::crashedPluginText() 500{ 501 return UI_STRING("Plug-in Failure", "Label text to be used if plugin host process has crashed"); 502} 503 504String 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 510String 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 515String PlatformStrategiesWinCE::mediaElementLoadingStateText() 516{ 517 return UI_STRING("Loading...", "Media controller status message when the media is loading"); 518} 519 520String PlatformStrategiesWinCE::mediaElementLiveBroadcastStateText() 521{ 522 return UI_STRING("Live Broadcast", "Media controller status message when watching a live broadcast"); 523} 524 525String 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 568String 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 611String 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 634String PlatformStrategiesWinCE::validationMessageValueMissingText() 635{ 636 return UI_STRING("value missing", "Validation message for required form control elements that have no value"); 637} 638 639String PlatformStrategiesWinCE::validationMessageTypeMismatchText() 640{ 641 return UI_STRING("type mismatch", "Validation message for input form controls with a value not matching type"); 642} 643 644String PlatformStrategiesWinCE::validationMessagePatternMismatchText() 645{ 646 return UI_STRING("pattern mismatch", "Validation message for input form controls requiring a constrained value according to pattern"); 647} 648 649String 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 654String PlatformStrategiesWinCE::validationMessageRangeUnderflowText() 655{ 656 return UI_STRING("range underflow", "Validation message for input form controls with value lower than allowed minimum"); 657} 658 659String PlatformStrategiesWinCE::validationMessageRangeOverflowText() 660{ 661 return UI_STRING("range overflow", "Validation message for input form controls with value higher than allowed maximum"); 662} 663 664String PlatformStrategiesWinCE::validationMessageStepMismatchText() 665{ 666 return UI_STRING("step mismatch", "Validation message for input form controls with value not respecting the step attribute"); 667} 668 669bool PlatformStrategiesWinCE::isLinkVisited(Page* page, LinkHash hash) 670{ 671 return page->group().isLinkVisited(hash); 672} 673 674void PlatformStrategiesWinCE::addVisitedLink(Page* page, LinkHash hash) 675{ 676 page->group().addVisitedLinkHash(hash); 677} 678