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