Changeset 261921 in webkit


Ignore:
Timestamp:
May 20, 2020 8:43:19 AM (4 years ago)
Author:
aestes@apple.com
Message:

[Mac] UI processes spin when creating the "Share" context menu item
https://bugs.webkit.org/show_bug.cgi?id=212137
<rdar://problem/54498394>

Reviewed by Wenson Hsieh.

Source/WebCore:

Ran update-webkit-localizable-strings.

  • en.lproj/Localizable.strings:

Source/WebCore/PAL:

  • pal/spi/mac/NSSharingServicePickerSPI.h: Declared -getMenuWithCompletion:.

Source/WebKit:

On Mac, WebKit has been using the +[NSMenuItem standardShareMenuItemForItems:] SPI to create
the "Share" context submenu and menu item. This call performs synchronous IPC and can result
in UI process spins.

Where available, switch to using the asynchronous
-[NSSharingServicePicker getMenuWithCompletion:] SPI instead. This method only creates the
submenu, not the menu item, so when using this new method we must create the "Share" menu
item ourselves.

  • UIProcess/mac/WebContextMenuProxyMac.h:
  • UIProcess/mac/WebContextMenuProxyMac.mm:

(WebKit::getStandardShareMenuItem):
(WebKit::WebContextMenuProxyMac::getShareMenuItem):
(WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
(WebKit::WebContextMenuProxyMac::getContextMenuItem):
(WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
(WebKit::WebContextMenuProxyMac::createShareMenuItem): Deleted.
(WebKit::WebContextMenuProxyMac::createContextMenuFromItems): Deleted.
(WebKit::WebContextMenuProxyMac::createContextMenuItem): Deleted.

Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r261919 r261921  
     12020-05-20  Andy Estes  <aestes@apple.com>
     2
     3        [Mac] UI processes spin when creating the "Share" context menu item
     4        https://bugs.webkit.org/show_bug.cgi?id=212137
     5        <rdar://problem/54498394>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        Ran update-webkit-localizable-strings.
     10
     11        * en.lproj/Localizable.strings:
     12
    1132020-05-20  Zalan Bujtas  <zalan@apple.com>
    214
  • trunk/Source/WebCore/PAL/ChangeLog

    r261845 r261921  
     12020-05-20  Andy Estes  <aestes@apple.com>
     2
     3        [Mac] UI processes spin when creating the "Share" context menu item
     4        https://bugs.webkit.org/show_bug.cgi?id=212137
     5        <rdar://problem/54498394>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        * pal/spi/mac/NSSharingServicePickerSPI.h: Declared -getMenuWithCompletion:.
     10
    1112020-05-18  Andy Estes  <aestes@apple.com>
    212
  • trunk/Source/WebCore/PAL/pal/spi/mac/NSSharingServicePickerSPI.h

    r220979 r261921  
    4242@property NSSharingServicePickerStyle style;
    4343- (NSMenu *)menu;
     44- (void)getMenuWithCompletion:(void(^)(NSMenu *))completion;
    4445- (void)hide;
    4546@end
  • trunk/Source/WebCore/en.lproj/Localizable.strings

    r261658 r261921  
     1/* accessibility help text for media controller time value >= 1 day */
     2"%1$d days %2$d hours %3$d minutes %4$d seconds" = "%1$d days %2$d hours %3$d minutes %4$d seconds";
     3
     4/* accessibility help text for media controller time value >= 60 minutes */
     5"%1$d hours %2$d minutes %3$d seconds" = "%1$d hours %2$d minutes %3$d seconds";
     6
     7/* accessibility help text for media controller time value >= 60 seconds */
     8"%1$d minutes %2$d seconds" = "%1$d minutes %2$d seconds";
     9
     10/* accessibility help text for media controller time value < 60 seconds */
     11"%1$d seconds" = "%1$d seconds";
     12
     13/* window title for a standalone image (uses multiplication symbol, not x) */
     14"%@ %@×%@ pixels" = "%@ %@×%@ pixels";
     15
     16/* visible name of the plug-in host process. The first argument is the plug-in name and the second argument is the application name. */
     17"%@ (%@ Internet plug-in)" = "%@ (%@ Internet plug-in)";
     18
     19/* Text track display name format that includes the language of the subtitle, in the form of 'Title (Language)' */
     20"%@ (%@)" = "%@ (%@)";
     21
     22/* Text track display name format that includes the country and language of the subtitle, in the form of 'Title (Language-Country)' */
     23"%@ (%@-%@)" = "%@ (%@-%@)";
     24
     25/* Text track contains Audio Descriptions */
     26"%@ AD" = "%@ AD";
     27
     28/* Text track contains closed captions */
     29"%@ CC" = "%@ CC";
     30
     31/* Text track contains simplified (3rd grade level) subtitles */
     32"%@ Easy Reader" = "%@ Easy Reader";
     33
     34/* Text track contains forced subtitles */
     35"%@ Forced" = "%@ Forced";
     36
     37/* visible name of the GPU process. The argument is the application name. */
     38"%@ Graphics and Media" = "%@ Graphics and Media";
     39
     40/* visible name of the network process. The argument is the application name. */
     41"%@ Networking" = "%@ Networking";
     42
     43/* Text track contains subtitles for the deaf and hard of hearing */
     44"%@ SDH" = "%@ SDH";
     45
     46/* Visible name of Service Worker process. The argument is the application name. */
     47"%@ Service Worker (%@)" = "%@ Service Worker (%@)";
     48
     49/* Visible name of the web process. The argument is the application name. */
     50"%@ Web Content" = "%@ Web Content";
     51
     52/* Visible name of the web process. The argument is the application name. */
     53"%@ Web Content (Cached)" = "%@ Web Content (Cached)";
     54
     55/* Visible name of the web process. The argument is the application name. */
     56"%@ Web Content (Prewarmed)" = "%@ Web Content (Prewarmed)";
     57
     58/* Visible name of Web Inspector's web process. The argument is the application name. */
     59"%@ Web Inspector" = "%@ Web Inspector";
     60
     61/* Name of application's single WebCrypto master key in Keychain */
     62"%@ WebCrypto Master Key" = "%@ WebCrypto Master Key";
     63
     64/* Label to describe the number of files selected in a file upload control that allows multiple files */
     65"%d files" = "%d files";
     66
     67/* Label for PDF page number indicator. */
     68"%d of %d" = "%d of %d";
     69
     70/* label next to file upload control; parameters are the number of photos and the number of videos */
     71"%lu photo(s) and %lu video(s)" = "%lu photo(s) and %lu video(s)";
     72
     73/* window title for a standalone image (uses multiplication symbol, not x) */
     74"%s %d×%d pixels" = "%s %d×%d pixels";
     75
     76/* Name of application's single WebCrypto master key in Keychain */
     77"%s WebCrypto Master Key" = "%s WebCrypto Master Key";
     78
     79/* Present the number of selected <option> items in a <select multiple> element (iOS only) */
     80"%zu Items" = "%zu Items";
     81
     82/* Present the element <select multiple> when no <option> items are selected (iOS only) */
     83"0 Items" = "0 Items";
     84
     85/* Present the element <select multiple> when a single <option> is selected (iOS only) */
     86"1 Item" = "1 Item";
     87
     88/* Option in segmented control for choosing list type in text editing */
     89"1. 2. 3." = "1. 2. 3.";
     90
     91/* Menu item title for KEYGEN pop-up menu */
     92"2048 (High Grade)" = "2048 (High Grade)";
     93
     94/* Name of application's single WebCrypto master key in Keychain */
     95"<application> WebCrypto Master Key" = "<application> WebCrypto Master Key";
     96
     97/* window title for a standalone image (uses multiplication symbol, not x) */
     98"<filename> %d×%d pixels" = "<filename> %d×%d pixels";
     99
     100/* WKErrorJavaScriptExceptionOccurred description */
     101"A JavaScript exception occurred" = "A JavaScript exception occurred";
     102
     103/* Title for Add to Photos action button */
     104"Add to Photos" = "Add to Photos";
     105
     106/* Title for Add to Reading List action button */
     107"Add to Reading List" = "Add to Reading List";
     108
     109/* Undo action name */
     110"Align Left (Undo action name)" = "Align Left";
     111
     112/* Undo action name */
     113"Align Right (Undo action name)" = "Align Right";
     114
     115/* Button title in Storage Access API prompt */
     116"Allow (cross-site cookie and website data access)" = "Allow";
     117
     118/* Button title in Device Orientation Permission API prompt */
     119"Allow (device motion and orientation access)" = "Allow";
     120
     121/* Message for requesting cross-site cookie and website data access. */
     122"Allow “%@” to use cookies and website data while browsing “%@”?" = "Allow “%@” to use cookies and website data while browsing “%@”?";
     123
     124/* WKErrorUnknown description */
     125"An unknown error occurred" = "An unknown error occurred";
     126
     127/* Label for the plain Apple Pay button. */
     128"Apple Pay" = "Apple Pay";
     129
     130/* Malware confirmation dialog title */
     131"Are you sure you wish to go to this site?" = "Are you sure you wish to go to this site?";
     132
     133/* WKErrorAttributedStringContentFailedToLoad description */
     134"Attributed string content failed to load" = "Attributed string content failed to load";
     135
     136/* Menu item label for automatic track selection behavior */
     137"Auto (Recommended)" = "Auto (Recommended)";
     138
     139/* Back context menu item */
     140"Back" = "Back";
     141
     142/* Label text to be used if plugin is blocked by a page's Content Security Policy */
     143"Blocked Plug-In (Blocked by page's Content Security Policy)" = "Blocked Plug-in";
     144
     145/* Label text to be used when an insecure plug-in version was blocked from loading */
     146"Blocked Plug-In (Insecure plug-in)" = "Blocked Plug-in";
     147
     148/* Bold context menu item */
     149"Bold" = "Bold";
     150
     151/* Undo action name */
     152"Bold (Undo action name)" = "Bold";
     153
     154/* Label for the book with Apple Pay button. */
     155"Book with Apple Pay" = "Book with Apple Pay";
     156
     157/* File Upload alert sheet button string for choosing an existing file from the file brower */
     158"Browse (file upload action sheet)" = "Browse";
     159
     160/* Option in segmented control for inserting a bulleted list in text editing */
     161"Bulleted list" = "Bulleted list";
     162
     163/* Label for the buy with Apple Pay button. */
     164"Buy with Apple Pay" = "Buy with Apple Pay";
     165
     166/* Cancel */
     167"Cancel" = "Cancel";
     168
     169/* Button title in Device Orientation Permission API prompt */
     170"Cancel (device motion and orientation access)" = "Cancel";
     171
     172/* Title for Cancel button label in button bar */
     173"Cancel button label in button bar" = "Cancel";
     174
     175/* Capitalize context menu item */
     176"Capitalize" = "Capitalize";
     177
     178/* Undo action name */
     179"Center (Undo action name)" = "Center";
     180
     181/* Undo action name */
     182"Change Attributes (Undo action name)" = "Change Attributes";
     183
     184/* Check spelling context menu item */
     185"Check Document Now" = "Check Document Now";
     186
     187/* Check grammar with spelling context menu item */
     188"Check Grammar With Spelling" = "Check Grammar With Spelling";
     189
     190/* Check spelling while typing context menu item */
     191"Check Spelling While Typing" = "Check Spelling While Typing";
     192
     193/* Label for the check out with Apple Pay button. */
     194"Check out with Apple Pay" = "Check out with Apple Pay";
     195
     196/* title for a single file chooser button used in HTML forms */
     197"Choose File" = "Choose File";
     198
     199/* title for a multiple file chooser button used in HTML forms. This title should be as short as possible. */
     200"Choose Files" = "Choose Files";
     201
     202/* Title for file button used in HTML5 forms for multiple media files */
     203"Choose Media (Multiple)" = "Choose Media (Multiple)";
     204
     205/* Title for file button used in HTML forms for media files */
     206"Choose Media (Single)" = "Choose Media (Single)";
     207
     208/* menu item in Recent Searches menu that empties menu's contents */
     209"Clear Recent Searches" = "Clear Recent Searches";
     210
     211/* Message to display in browser window when in webkit full screen mode. */
     212"Click to Exit Full Screen" = "Click to Exit Full Screen";
     213
     214/* Subtitle of the label to show on a snapshotted plug-in */
     215"Click to restart" = "Click to restart";
     216
     217/* WKErrorContentRuleListStoreCompileFailed description */
     218"Compiling a WKContentRuleList failed" = "Compiling a WKContentRuleList failed";
     219
     220/* WebKitErrorCannotShowMIMEType description */
     221"Content with specified MIME type can’t be shown" = "Content with specified MIME type can’t be shown";
     222
     223/* Continue */
     224"Continue" = "Continue";
     225
     226/* Continue with Touch ID. */
     227"Continue with Touch ID." = "Continue with Touch ID.";
     228
     229/* Media Controls context menu item */
     230"Controls" = "Controls";
     231
     232/* Undo action name */
     233"Convert to Ordered List (Undo action name)" = "Convert to Ordered List";
     234
     235/* Undo action name */
     236"Convert to Unordered List (Undo action name)" = "Convert to Unordered List";
     237
     238/* Copy context menu item */
     239"Copy" = "Copy";
     240
     241/* Title for Copy Link or Image action button */
     242"Copy (ActionSheet)" = "Copy";
     243
     244/* Copy Audio Address Location context menu item */
     245"Copy Audio Address" = "Copy Audio Address";
     246
     247/* Copy Image context menu item */
     248"Copy Image" = "Copy Image";
     249
     250/* Copy Link context menu item */
     251"Copy Link" = "Copy Link";
     252
     253/* Copy Video Address Location context menu item */
     254"Copy Video Address" = "Copy Video Address";
     255
     256/* Correct Spelling Automatically context menu item */
     257"Correct Spelling Automatically" = "Correct Spelling Automatically";
     258
     259/* Undo action name */
     260"Create Link (Undo action name)" = "Create Link";
     261
     262/* Cut context menu item */
     263"Cut" = "Cut";
     264
     265/* Undo action name */
     266"Cut (Undo action name)" = "Cut";
     267
     268/* Day label in date picker */
     269"DAY (Date picker for extra zoom mode)" = "DAY";
     270
     271/* Phishing warning title */
     272"Deceptive Website Warning" = "Deceptive Website Warning";
     273
     274/* Default writing direction context menu item */
     275"Default" = "Default";
     276
     277/* Undo action name */
     278"Delete (Undo action name)" = "Delete";
     279
     280/* text to display in <details> tag when it has no <summary> child */
     281"Details" = "Details";
     282
     283/* Undo action name */
     284"Dictation (Undo action name)" = "Dictation";
     285
     286/* Message for requesting cross-site cookie and website data access. */
     287"Do you want to allow “%@” to use cookies and website data while browsing “%@”?" = "Do you want to allow “%@” to use cookies and website data while browsing “%@”?";
     288
     289/* Button title in Storage Access API prompt */
     290"Don't Allow (cross-site cookie and website data access)" = "Don't Allow";
     291
     292/* Label for the donate with Apple Pay button. */
     293"Donate with Apple Pay" = "Donate with Apple Pay";
     294
     295/* Title of the Done button for zoomed form controls. */
     296"Done" = "Done";
     297
     298/* Download Audio To Disk context menu item */
     299"Download Audio" = "Download Audio";
     300
     301/* Download Image context menu item */
     302"Download Image" = "Download Image";
     303
     304/* Download Linked File context menu item */
     305"Download Linked File" = "Download Linked File";
     306
     307/* Download Video To Disk context menu item */
     308"Download Video" = "Download Video";
     309
     310/* Undo action name */
     311"Drag (Undo action name)" = "Drag";
     312
     313/* Video Enter Full Screen context menu item */
     314"Enter Full Screen" = "Enter Full Screen";
     315
     316/* menu item */
     317"Enter Picture in Picture" = "Enter Picture in Picture";
     318
     319/* Validation message for input form controls of type 'url' that have an invalid value */
     320"Enter a URL" = "Enter a URL";
     321
     322/* Validation message for number fields where the user entered a non-number string */
     323"Enter a number" = "Enter a number";
     324
     325/* Validation message for input form controls with value not respecting the step attribute */
     326"Enter a valid value" = "Enter a valid value";
     327
     328/* Validation message for input form controls of type 'email' that have an invalid value */
     329"Enter an email address" = "Enter an email address";
     330
     331/* Custom protocol synchronous load failure description */
     332"Error handling synchronous load with custom protocol" = "Error handling synchronous load with custom protocol";
     333
     334/* Button for exiting full screen when in full screen media playback */
     335"Exit Full Screen" = "Exit Full Screen";
     336
     337/* Full Screen Deceptive Website Exit Action */
     338"Exit Full Screen (Element Full Screen)" = "Exit Full Screen";
     339
     340/* Video Exit Full Screen context menu item */
     341"Exit Full Screen (context menu)" = "Exit Full Screen";
     342
     343/* menu item */
     344"Exit Picture in Picture" = "Exit Picture in Picture";
     345
     346/* The requested file doesn't exist */
     347"File does not exist" = "File does not exist";
     348
     349/* Validation message for required form control elements that have no value */
     350"Fill out this field" = "Fill out this field";
     351
     352/* Default application name for Open With context menu */
     353"Finder" = "Finder";
     354
     355/* Font context sub-menu item */
     356"Font" = "Font";
     357
     358/* Undo action name */
     359"Format Block (Undo action name)" = "Formatting";
     360
     361/* Forward context menu item */
     362"Forward" = "Forward";
     363
     364/* WebKitErrorFrameLoadInterruptedByPolicyChange description */
     365"Frame load interrupted" = "Frame load interrupted";
     366
     367/* Title of the Go button for zoomed form controls. */
     368"Go" = "Go";
     369
     370/* Action from safe browsing warning */
     371"Go Back" = "Go Back";
     372
     373/* Google Safe Browsing */
     374"Google Safe Browsing" = "Google Safe Browsing";
     375
     376/* accessibility role description for web area */
     377"HTML content" = "HTML content";
     378
     379/* Title of the Hide button for zoomed form controls. */
     380"Hide" = "Hide";
     381
     382/* Hide Media Controls context menu item */
     383"Hide Controls" = "Hide Controls";
     384
     385/* menu item title */
     386"Hide Spelling and Grammar" = "Hide Spelling and Grammar";
     387
     388/* menu item title */
     389"Hide Substitutions" = "Hide Substitutions";
     390
     391/* The default, default character encoding on Windows */
     392"ISO-8859-1" = "ISO-8859-1";
     393
     394/* Phishing warning description */
     395"If you believe this website is safe, you can %report-an-error%. Or, if you understand the risks involved, you can %bypass-link%." = "If you believe this website is safe, you can %report-an-error%. Or, if you understand the risks involved, you can %bypass-link%.";
     396
     397/* Action from safe browsing warning */
     398"If you understand the risks involved, you can %visit-this-unsafe-site-link%." = "If you understand the risks involved, you can %visit-this-unsafe-site-link%.";
     399
     400/* Ignore Grammar context menu item */
     401"Ignore Grammar" = "Ignore Grammar";
     402
     403/* Ignore Spelling context menu item */
     404"Ignore Spelling" = "Ignore Spelling";
     405
     406/* Undo action name */
     407"Indent (Undo action name)" = "Indent";
     408
     409/* Undo action name */
     410"Insert Drawing (Undo action name)" = "Insert Drawing";
     411
     412/* Undo action name */
     413"Insert List (Undo action name)" = "Insert List";
     414
     415/* Inspect Element context menu item */
     416"Inspect Element" = "Inspect Element";
     417
     418/* Validation message for input form controls with a value not matching type */
     419"Invalid value" = "Invalid value";
     420
     421/* Full Screen Deceptive Website Warning Sheet Title */
     422"It looks like you are typing while in full screen" = "It looks like you are typing while in full screen";
     423
     424/* Italic context menu item */
     425"Italic" = "Italic";
     426
     427/* Undo action name */
     428"Italics (Undo action name)" = "Italics";
     429
     430/* WebKitErrorJavaUnavailable description */
     431"Java is unavailable" = "Java is unavailable";
     432
     433/* Title for action sheet for JavaScript link */
     434"JavaScript Action Sheet Title" = "JavaScript";
     435
     436/* WKErrorJavaScriptResultTypeIsUnsupported description */
     437"JavaScript execution returned a result of an unsupported type" = "JavaScript execution returned a result of an unsupported type";
     438
     439/* Undo action name */
     440"Justify (Undo action name)" = "Justify";
     441
     442/* Name of keychain key generated by the KEYGEN tag */
     443"Key from %@" = "Key from %@";
     444
     445/* Learn Spelling context menu item */
     446"Learn Spelling" = "Learn Spelling";
     447
     448/* Action from safe browsing warning */
     449"Learn more…" = "Learn more…";
     450
     451/* Left to Right context menu item */
     452"Left to Right" = "Left to Right";
     453
     454/* Media controller status message when watching a live broadcast */
     455"Live Broadcast" = "Live Broadcast";
     456
     457/* Load request cancelled */
     458"Load request cancelled" = "Load request cancelled";
     459
     460/* Media controller status message when the media is loading */
     461"Loading…" = "Loading…";
     462
     463/* 'Website' name displayed when local documents have stored local data */
     464"Local documents on your computer" = "Local documents on your computer";
     465
     466/* Look Up in Dictionary context menu item */
     467"Look Up in Dictionary" = "Look Up in Dictionary";
     468
     469/* Look Up context menu item with selected word */
     470"Look Up “%@”" = "Look Up “%@”";
     471
     472/* Look Up context menu item with selected word */
     473"Look Up “%s”" = "Look Up “%s”";
     474
     475/* Look Up context menu item with selected word */
     476"Look Up “<selection>”" = "Look Up “<selection>”";
     477
     478/* WKErrorContentRuleListStoreLookupFailed description */
     479"Looking up a WKContentRuleList failed" = "Looking up a WKContentRuleList failed";
     480
     481/* WKErrorContentRuleListStoreVersionMismatch description */
     482"Looking up a WKContentRuleList found a binary that is incompatible" = "Looking up a WKContentRuleList found a binary that is incompatible";
     483
     484/* Media Loop context menu item */
     485"Loop" = "Loop";
     486
     487/* Undo action name */
     488"Loosen Kerning (Undo action name)" = "Loosen Kerning";
     489
     490/* Undo action name */
     491"Lower Baseline (Undo action name)" = "Lower Baseline";
     492
     493/* Month label in date picker */
     494"MONTH (Date picker for extra zoom mode)" = "MONTH";
     495
     496/* Make Lower Case context menu item */
     497"Make Lower Case" = "Make Lower Case";
     498
     499/* Make Upper Case context menu item */
     500"Make Upper Case" = "Make Upper Case";
     501
     502/* Malware warning title */
     503"Malware Website Warning" = "Malware Website Warning";
     504
     505/* Validation message for input form controls requiring a constrained value according to pattern */
     506"Match the requested format" = "Match the requested format";
     507
     508/* Malware confirmation dialog */
     509"Merely visiting a site is sufficient for malware to install itself and harm your computer." = "Merely visiting a site is sufficient for malware to install itself and harm your computer.";
     510
     511/* Label text to be used when a plugin is missing */
     512"Missing Plug-in" = "Missing Plug-in";
     513
     514/* Media Mute context menu item */
     515"Mute" = "Mute";
     516
     517/* No Guesses Found context menu item */
     518"No Guesses Found" = "No Guesses Found";
     519
     520/* Empty select list */
     521"No Options Select Popover" = "No Options";
     522
     523/* Label for only item in menu that appears when clicking on the search field image, when no searches have been performed */
     524"No recent searches" = "No recent searches";
     525
     526/* Option in segmented control for choosing list type in text editing */
     527"None" = "None";
     528
     529/* WebKitErrorCannotUseRestrictedPort description */
     530"Not allowed to use restricted network port" = "Not allowed to use restricted network port";
     531
     532/* Option in segmented control for inserting a numbered list in text editing */
     533"Numbered list" = "Numbered list";
     534
     535/* Title of the OK button for the number pad in zoomed form controls. */
     536"OK (OK button title in extra zoomed number pad)" = "OK";
     537
     538/* OK button label in document password failure alert */
     539"OK (document password failure alert)" = "OK";
     540
     541/* Menu item label for the track that represents disabling closed captions */
     542"Off" = "Off";
     543
     544/* Title for Open Link action button */
     545"Open" = "Open";
     546
     547/* Open Audio in New Window context menu item */
     548"Open Audio in New Window" = "Open Audio in New Window";
     549
     550/* Open Frame in New Window context menu item */
     551"Open Frame in New Window" = "Open Frame in New Window";
     552
     553/* Open Image in New Window context menu item */
     554"Open Image in New Window" = "Open Image in New Window";
     555
     556/* Open Link context menu item */
     557"Open Link" = "Open Link";
     558
     559/* Open in New Window context menu item */
     560"Open Link in New Window" = "Open Link in New Window";
     561
     562/* Open Video in New Window context menu item */
     563"Open Video in New Window" = "Open Video in New Window";
     564
     565/* Title for Open in Safari Link action button */
     566"Open in Safari" = "Open in Safari";
     567
     568/* Title for Open in External Application Link action button */
     569"Open in “%@”" = "Open in “%@”";
     570
     571/* context menu item for PDF */
     572"Open with %@" = "Open with %@";
     573
     574/* Undo action name */
     575"Outdent (Undo action name)" = "Outdent";
     576
     577/* Outline context menu item */
     578"Outline" = "Outline";
     579
     580/* Undo action name */
     581"Outline (Undo action name)" = "Outline";
     582
     583/* Paragraph direction context sub-menu item */
     584"Paragraph Direction" = "Paragraph Direction";
     585
     586/* Paste context menu item */
     587"Paste" = "Paste";
     588
     589/* Undo action name */
     590"Paste (Undo action name)" = "Paste";
     591
     592/* Undo action name */
     593"Paste Font (Undo action name)" = "Paste Font";
     594
     595/* Undo action name */
     596"Paste Ruler (Undo action name)" = "Paste Ruler";
     597
     598/* Media Pause context menu item */
     599"Pause" = "Pause";
     600
     601/* File Upload alert sheet button string for choosing an existing media item from the Photo Library */
     602"Photo Library (file upload action sheet)" = "Photo Library";
     603
     604/* Media Play context menu item */
     605"Play" = "Play";
     606
     607/* accessibility help text for enter full screen button */
     608"Play movie in full screen mode" = "Play movie in full screen mode";
     609
     610/* Label text to be used when a plug-in was blocked from loading because it was too small */
     611"Plug-In too small" = "Plug-In too small";
     612
     613/* Label text to be used if plugin host process has crashed */
     614"Plug-in Failure" = "Plug-in Failure";
     615
     616/* WebKitErrorPlugInCancelledConnection description */
     617"Plug-in cancelled" = "Plug-in cancelled";
     618
     619/* WebKitErrorPlugInWillHandleLoad description */
     620"Plug-in handled load" = "Plug-in handled load";
     621
     622/* Description of the primary type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari. */
     623"Portable Document Format" = "Portable Document Format";
     624
     625/* Description of the PostScript type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari. */
     626"PostScript" = "PostScript";
     627
     628/* Undo action name */
     629"Raise Baseline (Undo action name)" = "Raise Baseline";
     630
     631/* label for first item in the menu that appears when clicking on the search field image, used as embedded menu title */
     632"Recent Searches" = "Recent Searches";
     633
     634/* Reload context menu item */
     635"Reload" = "Reload";
     636
     637/* WKErrorContentRuleListStoreRemoveFailed description */
     638"Removing a WKContentRuleList failed" = "Removing a WKContentRuleList failed";
     639
     640/* default label for Reset buttons in forms on web pages */
     641"Reset" = "Reset";
     642
     643/* Reset button in date input context menu */
     644"Reset Button Date/Time Context Menu" = "Reset";
     645
     646/* Right to Left context menu item */
     647"Right to Left" = "Right to Left";
     648
     649/* Title of the Search button for zoomed form controls. */
     650"Search" = "Search";
     651
     652/* Search in Spotlight context menu item */
     653"Search in Spotlight" = "Search in Spotlight";
     654
     655/* Search the Web context menu item */
     656"Search the Web" = "Search the Web";
     657
     658/* Search with search provider context menu item with provider name inserted */
     659"Search with %@" = "Search with %@";
     660
     661/* Validation message for required file inputs that have no value */
     662"Select a file" = "Select a file";
     663
     664/* Validation message for required menu list controls that have no selection */
     665"Select an item in the list" = "Select an item in the list";
     666
     667/* Validation message for required radio boxes that have no selection */
     668"Select one of these options" = "Select one of these options";
     669
     670/* Validation message for required checkboxes that have not be selected */
     671"Select this checkbox" = "Select this checkbox";
     672
     673/* Selection direction context sub-menu item */
     674"Selection Direction" = "Selection Direction";
     675
     676/* Set button below date picker */
     677"Set (Button below date picker for extra zoom mode)" = "Set";
     678
     679/* Undo action name */
     680"Set Background Color (Undo action name)" = "Set Background Color";
     681
     682/* Undo action name */
     683"Set Color (Undo action name)" = "Set Color";
     684
     685/* Undo action name */
     686"Set Font (Undo action name)" = "Set Font";
     687
     688/* Undo action name */
     689"Set Traditional Character Shape (Undo action name)" = "Set Traditional Character Shape";
     690
     691/* Undo action name */
     692"Set Writing Direction (Undo action name)" = "Set Writing Direction";
     693
     694/* Label for the set up with Apple Pay button. */
     695"Set up with Apple Pay" = "Set up with Apple Pay";
     696
     697/* Title for Share context menu item. */
     698"Share" = "Share";
     699
     700/* Title for Share action button */
     701"Share…" = "Share…";
     702
     703/* Show colors context menu item */
     704"Show Colors" = "Show Colors";
     705
     706/* Show Media Controls context menu item */
     707"Show Controls" = "Show Controls";
     708
     709/* Action from safe browsing warning */
     710"Show Details" = "Show Details";
     711
     712/* Show fonts context menu item */
     713"Show Fonts" = "Show Fonts";
     714
     715/* menu item title */
     716"Show Spelling and Grammar" = "Show Spelling and Grammar";
     717
     718/* menu item title */
     719"Show Substitutions" = "Show Substitutions";
     720
     721/* Title of the context menu item to show when PDFPlugin was used instead of a blocked plugin */
     722"Show in blocked plug-in" = "Show in blocked plug-in";
     723
     724/* Smart Copy/Paste context menu item */
     725"Smart Copy/Paste" = "Smart Copy/Paste";
     726
     727/* Smart Dashes context menu item */
     728"Smart Dashes" = "Smart Dashes";
     729
     730/* Smart Links context menu item */
     731"Smart Links" = "Smart Links";
     732
     733/* Smart Quotes context menu item */
     734"Smart Quotes" = "Smart Quotes";
     735
     736/* Title of the label to show on a snapshotted plug-in */
     737"Snapshotted Plug-In" = "Snapshotted Plug-In";
     738
     739/* Speech context sub-menu item */
     740"Speech" = "Speech";
     741
     742/* Spelling and Grammar context sub-menu item */
     743"Spelling and Grammar" = "Spelling and Grammar";
     744
     745/* title for Start Debugging JavaScript menu item */
     746"Start Debugging JavaScript" = "Start Debugging JavaScript";
     747
     748/* title for Start Profiling JavaScript menu item */
     749"Start Profiling JavaScript" = "Start Profiling JavaScript";
     750
     751/* Start speaking context menu item */
     752"Start Speaking" = "Start Speaking";
     753
     754/* Full Screen Deceptive Website Stay Action */
     755"Stay in Full Screen (Element Full Screen)" = "Stay in Full Screen";
     756
     757/* Stop context menu item */
     758"Stop" = "Stop";
     759
     760/* title for Stop Debugging JavaScript menu item */
     761"Stop Debugging JavaScript" = "Stop Debugging JavaScript";
     762
     763/* title for Stop Profiling JavaScript menu item */
     764"Stop Profiling JavaScript" = "Stop Profiling JavaScript";
     765
     766/* Stop speaking context menu item */
     767"Stop Speaking" = "Stop Speaking";
     768
     769/* Undo action name */
     770"StrikeThrough (Undo action name)" = "StrikeThrough";
     771
     772/* Label for strong password. */
     773"Strong Password" = "Strong Password";
     774
     775/* Styles context menu item */
     776"Styles…" = "Styles…";
     777
     778/* default label for Submit buttons in forms on web pages */
     779"Submit" = "Submit";
     780
     781/* alt text for <input> elements with no alt, title, or value */
     782"Submit (input element)" = "Submit";
     783
     784/* Label for the subcribe with Apple Pay button. */
     785"Subscribe with Apple Pay" = "Subscribe with Apple Pay";
     786
     787/* Undo action name */
     788"Subscript (Undo action name)" = "Subscript";
     789
     790/* Substitutions context sub-menu item */
     791"Substitutions" = "Substitutions";
     792
     793/* Menu section heading for subtitles */
     794"Subtitles" = "Subtitles";
     795
     796/* Accessibility announcement for the data list suggestions dropdown going away. */
     797"Suggestions list hidden." = "Suggestions list hidden.";
     798
     799/* Accessibility announcement that the suggestions list became visible. The format argument is for the first option in the list. */
     800"Suggestions list visible, %@" = "Suggestions list visible, %@";
     801
     802/* Undo action name */
     803"Superscript (Undo action name)" = "Superscript";
     804
     805/* File Upload alert sheet camera button string for taking only photos */
     806"Take Photo (file upload action sheet)" = "Take Photo";
     807
     808/* File Upload alert sheet camera button string for taking photos or videos */
     809"Take Photo or Video (file upload action sheet)" = "Take Photo or Video";
     810
     811/* File Upload alert sheet camera button string for taking only videos */
     812"Take Video (file upload action sheet)" = "Take Video";
     813
     814/* Tencent Safe Browsing */
     815"Tencent Safe Browsing" = "Tencent Safe Browsing";
     816
     817/* Text Replacement context menu item */
     818"Text Replacement" = "Text Replacement";
     819
     820/* WebKitErrorCannotShowURL description */
     821"The URL can’t be shown" = "The URL can’t be shown";
     822
     823/* WebKitErrorBlockedByContentBlocker description */
     824"The URL was blocked by a content blocker" = "The URL was blocked by a content blocker";
     825
     826/* WebKitErrorFrameLoadBlockedByContentFilter description */
     827"The URL was blocked by a content filter" = "The URL was blocked by a content filter";
     828
     829/* WebKitErrorFrameLoadBlockedByRestrictions description */
     830"The URL was blocked by device restrictions" = "The URL was blocked by device restrictions";
     831
     832/* WKErrorWebViewInvalidated description */
     833"The WKWebView was invalidated" = "The WKWebView was invalidated";
     834
     835/* WKErrorWebContentProcessTerminated description */
     836"The Web Content process was terminated" = "The Web Content process was terminated";
     837
     838/* WebKitErrorGeolocationLocationUnknown description */
     839"The current location cannot be found." = "The current location cannot be found.";
     840
     841/* document password failure alert message */
     842"The document could not be opened with that password." = "The document could not be opened with that password.";
     843
     844/* WebKitErrorCannotFindPlugin description */
     845"The plug-in can’t be found" = "The plug-in can’t be found";
     846
     847/* WebKitErrorCannotLoadPlugin description */
     848"The plug-in can’t be loaded" = "The plug-in can’t be loaded";
     849
     850/* prompt string in authentication panel */
     851"The user name or password you entered for area “%@” on %@ was incorrect. Make sure you’re entering them correctly, and then try again." = "The user name or password you entered for area “%@” on %@ was incorrect. Make sure you’re entering them correctly, and then try again.";
     852
     853/* prompt string in authentication panel */
     854"The user name or password you entered for the %@ proxy server %@ was incorrect. Make sure you’re entering them correctly, and then try again." = "The user name or password you entered for the %@ proxy server %@ was incorrect. Make sure you’re entering them correctly, and then try again.";
     855
     856/* prompt string in authentication panel */
     857"The user name or password you entered for this area on %@ was incorrect. Make sure you’re entering them correctly, and then try again." = "The user name or password you entered for this area on %@ was incorrect. Make sure you’re entering them correctly, and then try again.";
     858
     859/* text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' */
     860"This is a searchable index. Enter search keywords: " = "This is a searchable index. Enter search keywords: ";
     861
     862/* Malware warning */
     863"This website may attempt to install dangerous software, which could harm your computer or steal your personal or financial information, like passwords, photos, or credit cards." = "This website may attempt to install dangerous software, which could harm your computer or steal your personal or financial information, like passwords, photos, or credit cards.";
     864
     865/* Phishing warning */
     866"This website may try to trick you into doing something dangerous, like installing software or disclosing personal or financial information, like passwords, phone numbers, or credit cards." = "This website may try to trick you into doing something dangerous, like installing software or disclosing personal or financial information, like passwords, phone numbers, or credit cards.";
     867
     868/* Unwanted software warning */
     869"This website may try to trick you into installing software that harms your browsing experience, like changing your settings without your permission or showing you unwanted ads. Once installed, it may be difficult to remove." = "This website may try to trick you into installing software that harms your browsing experience, like changing your settings without your permission or showing you unwanted ads. Once installed, it may be difficult to remove.";
     870
     871/* Informative text for requesting cross-site cookie and website data access. */
     872"This will allow “%@” to track your activity." = "This will allow “%@” to track your activity.";
     873
     874/* Undo action name */
     875"Tighten Kerning (Undo action name)" = "Tighten Kerning";
     876
     877/* WKErrorAttributedStringContentLoadTimedOut description */
     878"Timed out while loading attributed string content" = "Timed out while loading attributed string content";
     879
     880/* prompt string in authentication panel */
     881"To view this page, you must log in to area “%@” on %@." = "To view this page, you must log in to area “%@” on %@.";
     882
     883/* prompt string in authentication panel */
     884"To view this page, you must log in to the %@ proxy server %@." = "To view this page, you must log in to the %@ proxy server %@.";
     885
     886/* prompt string in authentication panel */
     887"To view this page, you must log in to this area on %@:" = "To view this page, you must log in to this area on %@:";
     888
     889/* Transformations context sub-menu item */
     890"Transformations" = "Transformations";
     891
     892/* Undo action name */
     893"Turn Off Kerning (Undo action name)" = "Turn Off Kerning";
     894
     895/* Undo action name */
     896"Turn Off Ligatures (Undo action name)" = "Turn Off Ligatures";
     897
     898/* Undo action name */
     899"Typing (Undo action name)" = "Typing";
     900
     901/* Full Screen Deceptive Website Warning Sheet Content Text */
     902"Typing is not allowed in full screen websites. “%@” may be showing a fake keyboard to trick you into disclosing personal or financial information." = "Typing is not allowed in full screen websites. “%@” may be showing a fake keyboard to trick you into disclosing personal or financial information.";
     903
     904/* accessibility role description for a URL field. */
     905"URL field" = "URL field";
     906
     907/* Unacceptable TLS certificate error */
     908"Unacceptable TLS certificate" = "Unacceptable TLS certificate";
     909
     910/* Underline context menu item */
     911"Underline" = "Underline";
     912
     913/* Undo action name */
     914"Underline (Undo action name)" = "Underline";
     915
     916/* Menu item label for an audio track that has no other name */
     917"Unknown (audio track)" = "Unknown";
     918
     919/* Unknown filesize FTP directory listing item */
     920"Unknown (filesize)" = "Unknown";
     921
     922/* Menu item label for a text track that has no other name */
     923"Unknown (text track)" = "Unknown";
     924
     925/* Undo action name */
     926"Unlink (Undo action name)" = "Unlink";
     927
     928/* Undo action name */
     929"Unscript (Undo action name)" = "Unscript";
     930
     931/* Label text to be used when an unsupported plug-in was blocked from loading */
     932"Unsupported Plug-In" = "Unsupported Plug-in";
     933
     934/* Undo action name */
     935"Use All Ligatures (Undo action name)" = "Use All Ligatures";
     936
     937/* Undo action name */
     938"Use Standard Kerning (Undo action name)" = "Use Standard Kerning";
     939
     940/* Undo action name */
     941"Use Standard Ligatures (Undo action name)" = "Use Standard Ligatures";
     942
     943/* Validation message for form control elements with a value shorter than minimum allowed length */
     944"Use at least %d characters" = "Use at least %d characters";
     945
     946/* Validation message for form control elements with a value shorter than maximum allowed length */
     947"Use no more than %d character(s)" = "Use no more than %d character(s)";
     948
     949/* Validation message for form control elements with a value shorter than maximum allowed length */
     950"Use no more than %d characters" = "Use no more than %d characters";
     951
     952/* Description of WebCrypto master keys in Keychain */
     953"Used to encrypt WebCrypto keys in persistent storage, such as IndexedDB" = "Used to encrypt WebCrypto keys in persistent storage, such as IndexedDB";
     954
     955/* The download was cancelled by the user */
     956"User cancelled the download" = "User cancelled the download";
     957
     958/* Validation message for input form controls with value lower than allowed minimum */
     959"Value must be greater than or equal to %@" = "Value must be greater than or equal to %@";
     960
     961/* Validation message for input form controls with value lower than allowed minimum */
     962"Value must be greater than or equal to %s" = "Value must be greater than or equal to %s";
     963
     964/* Validation message for input form controls with value higher than allowed maximum */
     965"Value must be less than or equal to %@" = "Value must be less than or equal to %@";
     966
     967/* Validation message for input form controls with value higher than allowed maximum */
     968"Value must be less than or equal to %s" = "Value must be less than or equal to %s";
     969
     970/* Phishing warning description */
     971"Warnings are shown for websites that have been reported as deceptive. Deceptive websites try to trick you into believing they are legitimate websites you trust." = "Warnings are shown for websites that have been reported as deceptive. Deceptive websites try to trick you into believing they are legitimate websites you trust.";
     972
     973/* Unwanted software warning description */
     974"Warnings are shown for websites where harmful software has been detected. You can check %the-status-of-site% on the %safeBrowsingProvider% diagnostic page." = "Warnings are shown for websites where harmful software has been detected. You can check %the-status-of-site% on the %safeBrowsingProvider% diagnostic page.";
     975
     976/* Malware warning description */
     977"Warnings are shown for websites where malicious software has been detected. You can check the %status-link% on the %safeBrowsingProvider% diagnostic page." = "Warnings are shown for websites where malicious software has been detected. You can check the %status-link% on the %safeBrowsingProvider% diagnostic page.";
     978
     979/* Web Inspector window title when inspecting Web Inspector */
     980"Web Inspector [%d] — %@" = "Web Inspector [%d] — %@";
     981
     982/* Web Inspector window title */
     983"Web Inspector — %@" = "Web Inspector — %@";
     984
     985/* Pseudo plug-in name, visible in the Installed Plug-ins page in Safari. */
     986"WebKit built-in PDF" = "WebKit built-in PDF";
     987
     988/* WebKitErrorInternal description */
     989"WebKit encountered an internal error" = "WebKit encountered an internal error";
     990
     991/* Unwanted software warning title */
     992"Website With Harmful Software Warning" = "Website With Harmful Software Warning";
     993
     994/* Year label in date picker */
     995"YEAR (Date picker for extra zoom mode)" = "YEAR";
     996
     997/* message in authentication panel */
     998"Your login information will be sent securely." = "Your login information will be sent securely.";
     999
     1000/* message in authentication panel */
     1001"Your password will be sent unencrypted." = "Your password will be sent unencrypted.";
     1002
     1003/* HTTP result code string */
     1004"accepted" = "accepted";
     1005
     1006/* Verb stating the action that will occur when a text field is selected, as used by accessibility */
     1007"activate" = "activate";
     1008
     1009/* An ARIA accessibility group that acts as an alert. */
     1010"alert" = "alert";
     1011
     1012/* An ARIA accessibility group that acts as a status update. */
     1013"application status" = "application status";
     1014
     1015/* An ARIA accessibility group that acts as an article. */
     1016"article" = "article";
     1017
     1018/* accessibility role description for an attachment element */
     1019"attachment" = "attachment";
     1020
     1021/* accessibility help text for audio element controller */
     1022"audio element playback controls and status display" = "audio element playback controls and status display";
     1023
     1024/* accessibility label for audio element controller */
     1025"audio playback" = "audio playback";
     1026
     1027/* accessibility label for seek back 30 seconds button */
     1028"back 30 seconds" = "back 30 seconds";
     1029
     1030/* HTTP result code string */
     1031"bad gateway" = "bad gateway";
     1032
     1033/* HTTP result code string */
     1034"bad request" = "bad request";
     1035
     1036/* An ARIA accessibility group that acts as a banner. */
     1037"banner" = "banner";
     1038
     1039/* accessibility help text for play button */
     1040"begin playback" = "begin playback";
     1041
     1042/* accessibility description for a search field cancel button */
     1043"cancel" = "cancel";
     1044
     1045/* Verb stating the action that will occur when an unchecked checkbox is clicked, as used by accessibility */
     1046"check" = "check";
     1047
     1048/* HTTP result code string */
     1049"client error" = "client error";
     1050
     1051/* accessibility role description for a color well */
     1052"color well" = "color well";
     1053
     1054/* An ARIA accessibility group that acts as a region of complementary information. */
     1055"complementary" = "complementary";
     1056
     1057/* HTTP result code string */
     1058"conflict" = "conflict";
     1059
     1060/* Label for the AutoFill contacts button inside a text field. */
     1061"contact info AutoFill" = "contact info AutoFill";
     1062
     1063/* An ARIA accessibility group that contains content. */
     1064"content information" = "content information";
     1065
     1066/* HTTP result code string */
     1067"continue" = "continue";
     1068
     1069/* HTTP result code string */
     1070"created" = "created";
     1071
     1072/* Label for the credit card AutoFill button inside a text field. */
     1073"credit card AutoFill" = "credit card AutoFill";
     1074
     1075/* The less good value description for a meter element. */
     1076"critical value" = "critical value";
     1077
     1078/* accessibility help text for movie status display */
     1079"current movie status" = "current movie status";
     1080
     1081/* accessibility help text for elapsed time display */
     1082"current movie time in seconds" = "current movie time in seconds";
     1083
     1084/* accessibility role description for a date and time field. */
     1085"date and time field" = "date and time field";
     1086
     1087/* accessibility role description for a date field. */
     1088"date field" = "date field";
     1089
     1090/* role description of ARIA definition role */
     1091"definition" = "definition";
     1092
     1093/* description detail */
     1094"description" = "description";
     1095
     1096/* accessibility role description of a description list */
     1097"description list" = "description list";
     1098
     1099/* accessibility role description for a details element */
     1100"details" = "details";
     1101
     1102/* An ARIA accessibility group that acts as a document. */
     1103"document" = "document";
     1104
     1105/* accessibility label for elapsed time display */
     1106"elapsed time" = "elapsed time";
     1107
     1108/* accessibility role description for an email field. */
     1109"email field" = "email field";
     1110
     1111/* accessibility label for enter full screen button */
     1112"enter full screen" = "enter full screen";
     1113
     1114/* accessibility label for exit full screen button */
     1115"exit full screen" = "exit full screen";
     1116
     1117/* HTTP result code string */
     1118"expectation failed" = "expectation failed";
     1119
     1120/* accessibility label for fast forward button */
     1121"fast forward" = "fast forward";
     1122
     1123/* accessibility label for fast reverse button */
     1124"fast reverse" = "fast reverse";
     1125
     1126/* accessibility role description for a group containing a scrollable list of articles. */
     1127"feed" = "feed";
     1128
     1129/* accessibility role description for a figure element. */
     1130"figure" = "figure";
     1131
     1132/* accessibility role description for a file upload button */
     1133"file upload button" = "file upload button";
     1134
     1135/* accessibility role description for a footer */
     1136"footer" = "footer";
     1137
     1138/* HTTP result code string */
     1139"forbidden" = "forbidden";
     1140
     1141/* HTTP result code string */
     1142"found" = "found";
     1143
     1144/* HTTP result code string */
     1145"gateway timed out" = "gateway timed out";
     1146
     1147/* accessibility role description for headings */
     1148"heading" = "heading";
     1149
     1150/* accessibility label for hide closed captions button */
     1151"hide closed captions" = "hide closed captions";
     1152
     1153/* accessibility role description for a mark element */
     1154"highlighted" = "highlighted";
     1155
     1156/* accessibility role description for image map */
     1157"image map" = "image map";
     1158
     1159/* accessibility help text for an indefinite media controller time value */
     1160"indefinite time" = "indefinite time";
     1161
     1162/* HTTP result code string */
     1163"informational" = "informational";
     1164
     1165/* HTTP result code string */
     1166"internal server error" = "internal server error";
     1167
     1168/* Verb stating the action that will occur when a link is clicked, as used by accessibility */
     1169"jump" = "jump";
     1170
     1171/* HTTP result code string */
     1172"length required" = "length required";
     1173
     1174/* accessibility role description for link */
     1175"link" = "link";
     1176
     1177/* accessibility role description for list marker */
     1178"list marker" = "list marker";
     1179
     1180/* An ARIA accessibility group that acts as a console log. */
     1181"log" = "log";
     1182
     1183/* An ARIA accessibility group that is the main portion of the website. */
     1184"main" = "main";
     1185
     1186/* An ARIA accessibility group that acts as a marquee. */
     1187"marquee" = "marquee";
     1188
     1189/* An ARIA accessibility group that contains mathematical symbols. */
     1190"math" = "math";
     1191
     1192/* HTTP result code string */
     1193"method not allowed" = "method not allowed";
     1194
     1195/* accessibility role description for a month field. */
     1196"month and year field" = "month and year field";
     1197
     1198/* HTTP result code string */
     1199"moved permanently" = "moved permanently";
     1200
     1201/* accessibility label for timeline slider */
     1202"movie time" = "movie time";
     1203
     1204/* accessibility help text for timeline slider */
     1205"movie time scrubber" = "movie time scrubber";
     1206
     1207/* accessibility help text for timeline slider thumb */
     1208"movie time scrubber thumb" = "movie time scrubber thumb";
     1209
     1210/* HTTP result code string */
     1211"multiple choices" = "multiple choices";
     1212
     1213/* accessibility label for mute button */
     1214"mute" = "mute";
     1215
     1216/* accessibility help text for mute button */
     1217"mute audio tracks" = "mute audio tracks";
     1218
     1219/* An ARIA accessibility group that contains the main navigation elements of a website. */
     1220"navigation" = "navigation";
     1221
     1222/* HTTP result code string */
     1223"needs proxy" = "needs proxy";
     1224
     1225/* HTTP result code string */
     1226"no content" = "no content";
     1227
     1228/* HTTP result code string */
     1229"no error" = "no error";
     1230
     1231/* text to display in file button used in HTML forms when no file is selected */
     1232"no file selected" = "no file selected";
     1233
     1234/* text to display in file button used in HTML forms when no files are selected and the button allows multiple files to be selected */
     1235"no files selected" = "no files selected";
     1236
     1237/* HTTP result code string */
     1238"no longer exists" = "no longer exists";
     1239
     1240/* Text to display in file button used in HTML forms for media files when no media files are selected and the button allows multiple files to be selected */
     1241"no media selected (multiple)" = "no media selected (multiple)";
     1242
     1243/* Text to display in file button used in HTML forms for media files when no media file is selected */
     1244"no media selected (single)" = "no media selected (single)";
     1245
     1246/* HTTP result code string */
     1247"non-authoritative information" = "non-authoritative information";
     1248
     1249/* HTTP result code string */
     1250"not found" = "not found";
     1251
     1252/* HTTP result code string */
     1253"not modified" = "not modified";
     1254
     1255/* An ARIA accessibility group that acts as a note in a document. */
     1256"note" = "note";
     1257
     1258/* accessibility role description for a number field. */
     1259"number field" = "number field";
     1260
     1261/* accessibility help text for remaining time display */
     1262"number of seconds of movie remaining" = "number of seconds of movie remaining";
     1263
     1264/* The optimum value description for a meter element. */
     1265"optimal value" = "optimal value";
     1266
     1267/* accessibility role description for an output element */
     1268"output" = "output";
     1269
     1270/* HTTP result code string */
     1271"partial content" = "partial content";
     1272
     1273/* Label for the AutoFill credentials button inside a text field. */
     1274"password AutoFill" = "password AutoFill";
     1275
     1276/* accessibility label for pause button */
     1277"pause" = "pause";
     1278
     1279/* accessibility help text for pause button */
     1280"pause playback" = "pause playback";
     1281
     1282/* HTTP result code string */
     1283"payment required" = "payment required";
     1284
     1285/* accessibility label for play button */
     1286"play" = "play";
     1287
     1288/* HTTP result code string */
     1289"precondition failed" = "precondition failed";
     1290
     1291/* Verb stating the action that will occur when a button is pressed, as used by accessibility */
     1292"press" = "press";
     1293
     1294/* HTTP result code string */
     1295"proxy authentication required" = "proxy authentication required";
     1296
     1297/* Validation message for input form controls with value higher than allowed maximum */
     1298"range overflow" = "range overflow";
     1299
     1300/* Validation message for input form controls with value lower than allowed minimum */
     1301"range underflow" = "range underflow";
     1302
     1303/* HTTP result code string */
     1304"redirected" = "redirected";
     1305
     1306/* An ARIA accessibility group that acts as a distinct region in a document. */
     1307"region" = "region";
     1308
     1309/* accessibility label for time remaining display */
     1310"remaining time" = "remaining time";
     1311
     1312/* Action from safe browsing warning */
     1313"report an error" = "report an error";
     1314
     1315/* HTTP result code string */
     1316"request timed out" = "request timed out";
     1317
     1318/* HTTP result code string */
     1319"request too large" = "request too large";
     1320
     1321/* HTTP result code string */
     1322"requested URL too long" = "requested URL too long";
     1323
     1324/* HTTP result code string */
     1325"requested range not satisfiable" = "requested range not satisfiable";
     1326
     1327/* HTTP result code string */
     1328"reset content" = "reset content";
     1329
     1330/* accessibility help text for return streaming movie to real time button */
     1331"resume real time streaming" = "resume real time streaming";
     1332
     1333/* accessibility label for return to real time button */
     1334"return to real time" = "return to real time";
     1335
     1336/* An ARIA accessibility group that contains a search feature of a website. */
     1337"search" = "search";
     1338
     1339/* HTTP result code string */
     1340"see other" = "see other";
     1341
     1342/* accessibility help text for jump back 30 seconds button */
     1343"seek movie back 30 seconds" = "seek movie back 30 seconds";
     1344
     1345/* accessibility help text for fast rewind button */
     1346"seek quickly back" = "seek quickly back";
     1347
     1348/* accessibility help text for fast forward button */
     1349"seek quickly forward" = "seek quickly forward";
     1350
     1351/* Verb stating the action that will occur when a radio button is clicked, as used by accessibility */
     1352"select" = "select";
     1353
     1354/* accessibility role description for a horizontal rule [<hr>] */
     1355"separator" = "separator";
     1356
     1357/* HTTP result code string */
     1358"server error" = "server error";
     1359
     1360/* HTTP result code string */
     1361"service unavailable" = "service unavailable";
     1362
     1363/* accessibility label for show closed captions button */
     1364"show closed captions" = "show closed captions";
     1365
     1366/* accessibility help text for show closed captions button */
     1367"start displaying closed captions" = "start displaying closed captions";
     1368
     1369/* accessibility label for movie status */
     1370"status" = "status";
     1371
     1372/* accessibility help text for hide closed captions button */
     1373"stop displaying closed captions" = "stop displaying closed captions";
     1374
     1375/* Label for the strong password AutoFill button inside a text field. */
     1376"strong password AutoFill" = "strong password AutoFill";
     1377
     1378/* The suboptimal value description for a meter element. */
     1379"suboptimal value" = "suboptimal value";
     1380
     1381/* HTTP result code string */
     1382"success" = "success";
     1383
     1384/* accessibility role description for a summary element */
     1385"summary" = "summary";
     1386
     1387/* HTTP result code string */
     1388"switching protocols" = "switching protocols";
     1389
     1390/* An ARIA accessibility group that contains the content of a tab. */
     1391"tab panel" = "tab panel";
     1392
     1393/* accessibility role description for a telephone number field. */
     1394"telephone number field" = "telephone number field";
     1395
     1396/* HTTP result code string */
     1397"temporarily redirected" = "temporarily redirected";
     1398
     1399/* term word of a description list */
     1400"term" = "term";
     1401
     1402/* Part of malware description */
     1403"the status of “%site%”" = "the status of “%site%”";
     1404
     1405/* accessibility role description for a time field. */
     1406"time field" = "time field";
     1407
     1408/* accessibility label for timeline thumb */
     1409"timeline slider thumb" = "timeline slider thumb";
     1410
     1411/* An ARIA accessibility group that acts as an updating timer. */
     1412"timer" = "timer";
     1413
     1414/* An ARIA accessibility group that acts as a tooltip. */
     1415"tooltip" = "tooltip";
     1416
     1417/* HTTP result code string */
     1418"unacceptable" = "unacceptable";
     1419
     1420/* HTTP result code string */
     1421"unauthorized" = "unauthorized";
     1422
     1423/* Verb stating the action that will occur when a checked checkbox is clicked, as used by accessibility */
     1424"uncheck" = "uncheck";
     1425
     1426/* HTTP result code string */
     1427"unimplemented" = "unimplemented";
     1428
     1429/* Unknown filename */
     1430"unknown" = "unknown";
     1431
     1432/* accessibility label for turn mute off button */
     1433"unmute" = "unmute";
     1434
     1435/* accessibility help text for un mute button */
     1436"unmute audio tracks" = "unmute audio tracks";
     1437
     1438/* HTTP result code string */
     1439"unsupported media type" = "unsupported media type";
     1440
     1441/* HTTP result code string */
     1442"unsupported version" = "unsupported version";
     1443
     1444/* accessibility help text for video element controller */
     1445"video element playback controls and status display" = "video element playback controls and status display";
     1446
     1447/* accessibility label for video element controller */
     1448"video playback" = "video playback";
     1449
     1450/* Action from safe browsing warning */
     1451"visit this unsafe website" = "visit this unsafe website";
     1452
     1453/* An ARIA accessibility group that acts as an alert dialog. */
     1454"web alert dialog" = "web alert dialog";
     1455
     1456/* An ARIA accessibility group that acts as an application. */
     1457"web application" = "web application";
     1458
     1459/* An ARIA accessibility group that acts as an dialog. */
     1460"web dialog" = "web dialog";
     1461
     1462/* accessibility role description for a time field. */
     1463"week and year field" = "week and year field";
     1464
     1465/* Message for requesting access to the device motion and orientation */
     1466"“%@” Would Like to Access Motion and Orientation" = "“%@” Would Like to Access Motion and Orientation";
     1467
     1468/* Allow the specified bundle to sign in to the specified website */
     1469"“%@” would like to sign in to “%@”." = "“%@” would like to sign in to “%@”.";
     1470
    11471/* Allow the specified bundle to use Touch ID to sign in to the specified website on this device */
    21472"“%@” would like to use Touch ID for “%@”." = "“%@” would like to use Touch ID for “%@”.";
    31473
    4 /* "Allow the specified bundle to sign in to the specified website */
    5 "“%@” would like to sign in to “%@”." = "“%@” would like to sign in to “%@”.";
    6 
    7 /* accessibility help text for media controller time value >= 1 day */
    8 "%1$d days %2$d hours %3$d minutes %4$d seconds" = "%1$d days %2$d hours %3$d minutes %4$d seconds";
    9 
    10 /* accessibility help text for media controller time value >= 60 minutes */
    11 "%1$d hours %2$d minutes %3$d seconds" = "%1$d hours %2$d minutes %3$d seconds";
    12 
    13 /* accessibility help text for media controller time value >= 60 seconds */
    14 "%1$d minutes %2$d seconds" = "%1$d minutes %2$d seconds";
    15 
    16 /* accessibility help text for media controller time value < 60 seconds */
    17 "%1$d seconds" = "%1$d seconds";
    18 
    19 /* window title for a standalone image (uses multiplication symbol, not x) */
    20 "%@ %@×%@ pixels" = "%@ %@×%@ pixels";
    21 
    22 /* visible name of the plug-in host process. The first argument is the plug-in name and the second argument is the application name. */
    23 "%@ (%@ Internet plug-in)" = "%@ (%@ Internet plug-in)";
    24 
    25 /* Text track display name format that includes the language of the subtitle, in the form of 'Title (Language)' */
    26 "%@ (%@)" = "%@ (%@)";
    27 
    28 /* Text track display name format that includes the country and language of the subtitle, in the form of 'Title (Language-Country)' */
    29 "%@ (%@-%@)" = "%@ (%@-%@)";
    30 
    31 /* Text track contains Audio Descriptions */
    32 "%@ AD" = "%@ AD";
    33 
    34 /* Text track contains closed captions */
    35 "%@ CC" = "%@ CC";
    36 
    37 /* Text track contains simplified (3rd grade level) subtitles */
    38 "%@ Easy Reader" = "%@ Easy Reader";
    39 
    40 /* Text track contains forced subtitles */
    41 "%@ Forced" = "%@ Forced";
    42 
    43 /* visible name of the GPU process. The argument is the application name. */
    44 "%@ Graphics and Media" = "%@ Graphics and Media";
    45 
    46 /* visible name of the network process. The argument is the application name. */
    47 "%@ Networking" = "%@ Networking";
    48 
    49 /* Text track contains subtitles for the deaf and hard of hearing */
    50 "%@ SDH" = "%@ SDH";
    51 
    52 /* Visible name of Service Worker process. The argument is the application name. */
    53 "%@ Service Worker (%@)" = "%@ Service Worker (%@)";
    54 
    55 /* Visible name of the web process. The argument is the application name. */
    56 "%@ Web Content" = "%@ Web Content";
    57 
    58 /* Visible name of the web process. The argument is the application name. */
    59 "%@ Web Content (Cached)" = "%@ Web Content (Cached)";
    60 
    61 /* Visible name of the web process. The argument is the application name. */
    62 "%@ Web Content (Prewarmed)" = "%@ Web Content (Prewarmed)";
    63 
    64 /* Visible name of Web Inspector's web process. The argument is the application name. */
    65 "%@ Web Inspector" = "%@ Web Inspector";
    66 
    67 /* Name of application's single WebCrypto master key in Keychain */
    68 "%@ WebCrypto Master Key" = "%@ WebCrypto Master Key";
    69 
    70 /* Label to describe the number of files selected in a file upload control that allows multiple files */
    71 "%d files" = "%d files";
    72 
    73 /* Label for PDF page number indicator. */
    74 "%d of %d" = "%d of %d";
    75 
    76 /* label next to file upload control; parameters are the number of photos and the number of videos */
    77 "%lu photo(s) and %lu video(s)" = "%lu photo(s) and %lu video(s)";
    78 
    79 /* window title for a standalone image (uses multiplication symbol, not x) */
    80 "%s %d×%d pixels" = "%s %d×%d pixels";
    81 
    82 /* Name of application's single WebCrypto master key in Keychain */
    83 "%s WebCrypto Master Key" = "%s WebCrypto Master Key";
    84 
    85 /* Present the number of selected <option> items in a <select multiple> element (iOS only) */
    86 "%zu Items" = "%zu Items";
    87 
    88 /* Present the element <select multiple> when no <option> items are selected (iOS only) */
    89 "0 Items" = "0 Items";
    90 
    91 /* Present the element <select multiple> when a single <option> is selected (iOS only) */
    92 "1 Item" = "1 Item";
    93 
    94 /* Option in segmented control for choosing list type in text editing */
    95 "1. 2. 3." = "1. 2. 3.";
    96 
    97 /* Menu item title for KEYGEN pop-up menu */
    98 "2048 (High Grade)" = "2048 (High Grade)";
    99 
    100 /* Name of application's single WebCrypto master key in Keychain */
    101 "<application> WebCrypto Master Key" = "<application> WebCrypto Master Key";
    102 
    103 /* window title for a standalone image (uses multiplication symbol, not x) */
    104 "<filename> %d×%d pixels" = "<filename> %d×%d pixels";
    105 
    106 /* WKErrorJavaScriptExceptionOccurred description */
    107 "A JavaScript exception occurred" = "A JavaScript exception occurred";
    108 
    109 /* Title for Add to Photos action button */
    110 "Add to Photos" = "Add to Photos";
    111 
    112 /* Title for Add to Reading List action button */
    113 "Add to Reading List" = "Add to Reading List";
    114 
    115 /* Undo action name */
    116 "Align Left (Undo action name)" = "Align Left";
    117 
    118 /* Undo action name */
    119 "Align Right (Undo action name)" = "Align Right";
    120 
    121 /* Button title in Storage Access API prompt */
    122 "Allow (cross-site cookie and website data access)" = "Allow";
    123 
    124 /* Button title in Device Orientation Permission API prompt */
    125 "Allow (device motion and orientation access)" = "Allow";
    126 
    127 /* Message for requesting cross-site cookie and website data access. */
    128 "Allow “%@” to use cookies and website data while browsing “%@”?" = "Allow “%@” to use cookies and website data while browsing “%@”?";
    129 
    130 /* WKErrorUnknown description */
    131 "An unknown error occurred" = "An unknown error occurred";
    132 
    133 /* Label for the plain Apple Pay button. */
    134 "Apple Pay" = "Apple Pay";
    135 
    136 /* Malware confirmation dialog title */
    137 "Are you sure you wish to go to this site?" = "Are you sure you wish to go to this site?";
    138 
    139 /* WKErrorAttributedStringContentFailedToLoad description */
    140 "Attributed string content failed to load" = "Attributed string content failed to load";
    141 
    142 /* Menu item label for automatic track selection behavior */
    143 "Auto (Recommended)" = "Auto (Recommended)";
    144 
    145 /* Back context menu item */
    146 "Back" = "Back";
    147 
    148 /* Label text to be used if plugin is blocked by a page's Content Security Policy */
    149 "Blocked Plug-In (Blocked by page's Content Security Policy)" = "Blocked Plug-in";
    150 
    151 /* Label text to be used when an insecure plug-in version was blocked from loading */
    152 "Blocked Plug-In (Insecure plug-in)" = "Blocked Plug-in";
    153 
    154 /* Bold context menu item */
    155 "Bold" = "Bold";
    156 
    157 /* Undo action name */
    158 "Bold (Undo action name)" = "Bold";
    159 
    160 /* Label for the book with Apple Pay button. */
    161 "Book with Apple Pay" = "Book with Apple Pay";
    162 
    163 /* File Upload alert sheet button string for choosing an existing file from the file brower */
    164 "Browse (file upload action sheet)" = "Browse";
    165 
    166 /* Option in segmented control for inserting a bulleted list in text editing */
    167 "Bulleted list" = "Bulleted list";
    168 
    169 /* Label for the buy with Apple Pay button. */
    170 "Buy with Apple Pay" = "Buy with Apple Pay";
    171 
    172 /* Cancel */
    173 "Cancel" = "Cancel";
    174 
    175 /* Button title in Device Orientation Permission API prompt */
    176 "Cancel (device motion and orientation access)" = "Cancel";
    177 
    178 /* Title for Cancel button label in button bar */
    179 "Cancel button label in button bar" = "Cancel";
    180 
    181 /* Capitalize context menu item */
    182 "Capitalize" = "Capitalize";
    183 
    184 /* Undo action name */
    185 "Center (Undo action name)" = "Center";
    186 
    187 /* Undo action name */
    188 "Change Attributes (Undo action name)" = "Change Attributes";
    189 
    190 /* Check spelling context menu item */
    191 "Check Document Now" = "Check Document Now";
    192 
    193 /* Check grammar with spelling context menu item */
    194 "Check Grammar With Spelling" = "Check Grammar With Spelling";
    195 
    196 /* Check spelling while typing context menu item */
    197 "Check Spelling While Typing" = "Check Spelling While Typing";
    198 
    199 /* Label for the check out with Apple Pay button. */
    200 "Check out with Apple Pay" = "Check out with Apple Pay";
    201 
    202 /* title for a single file chooser button used in HTML forms */
    203 "Choose File" = "Choose File";
    204 
    205 /* title for a multiple file chooser button used in HTML forms. This title should be as short as possible. */
    206 "Choose Files" = "Choose Files";
    207 
    208 /* Title for file button used in HTML5 forms for multiple media files */
    209 "Choose Media (Multiple)" = "Choose Media (Multiple)";
    210 
    211 /* Title for file button used in HTML forms for media files */
    212 "Choose Media (Single)" = "Choose Media (Single)";
    213 
    214 /* menu item in Recent Searches menu that empties menu's contents */
    215 "Clear Recent Searches" = "Clear Recent Searches";
    216 
    217 /* Message to display in browser window when in webkit full screen mode. */
    218 "Click to Exit Full Screen" = "Click to Exit Full Screen";
    219 
    220 /* Subtitle of the label to show on a snapshotted plug-in */
    221 "Click to restart" = "Click to restart";
    222 
    223 /* WKErrorContentRuleListStoreCompileFailed description */
    224 "Compiling a WKContentRuleList failed" = "Compiling a WKContentRuleList failed";
    225 
    226 /* WebKitErrorCannotShowMIMEType description */
    227 "Content with specified MIME type can’t be shown" = "Content with specified MIME type can’t be shown";
    228 
    229 /* Continue */
    230 "Continue" = "Continue";
    231 
    232 /* Continue with Touch ID */
    233 "Continue with Touch ID." = "Continue with Touch ID.";
    234 
    235 /* Media Controls context menu item */
    236 "Controls" = "Controls";
    237 
    238 /* Undo action name */
    239 "Convert to Ordered List (Undo action name)" = "Convert to Ordered List";
    240 
    241 /* Undo action name */
    242 "Convert to Unordered List (Undo action name)" = "Convert to Unordered List";
    243 
    244 /* Copy context menu item */
    245 "Copy" = "Copy";
    246 
    247 /* Title for Copy Link or Image action button */
    248 "Copy (ActionSheet)" = "Copy";
    249 
    250 /* Copy Audio Address Location context menu item */
    251 "Copy Audio Address" = "Copy Audio Address";
    252 
    253 /* Copy Image context menu item */
    254 "Copy Image" = "Copy Image";
    255 
    256 /* Copy Link context menu item */
    257 "Copy Link" = "Copy Link";
    258 
    259 /* Copy Video Address Location context menu item */
    260 "Copy Video Address" = "Copy Video Address";
    261 
    262 /* Correct Spelling Automatically context menu item */
    263 "Correct Spelling Automatically" = "Correct Spelling Automatically";
    264 
    265 /* Undo action name */
    266 "Create Link (Undo action name)" = "Create Link";
    267 
    268 /* Cut context menu item */
    269 "Cut" = "Cut";
    270 
    271 /* Undo action name */
    272 "Cut (Undo action name)" = "Cut";
    273 
    274 /* Day label in date picker */
    275 "DAY (Date picker for extra zoom mode)" = "DAY";
    276 
    277 /* Phishing warning title */
    278 "Deceptive Website Warning" = "Deceptive Website Warning";
    279 
    280 /* Default writing direction context menu item */
    281 "Default" = "Default";
    282 
    283 /* Undo action name */
    284 "Delete (Undo action name)" = "Delete";
    285 
    286 /* text to display in <details> tag when it has no <summary> child */
    287 "Details" = "Details";
    288 
    289 /* Undo action name */
    290 "Dictation (Undo action name)" = "Dictation";
    291 
    292 /* Message for requesting cross-site cookie and website data access. */
    293 "Do you want to allow “%@” to use cookies and website data while browsing “%@”?" = "Do you want to allow “%@” to use cookies and website data while browsing “%@”?";
    294 
    295 /* Button title in Storage Access API prompt */
    296 "Don't Allow (cross-site cookie and website data access)" = "Don't Allow";
    297 
    298 /* Label for the donate with Apple Pay button. */
    299 "Donate with Apple Pay" = "Donate with Apple Pay";
    300 
    301 /* Title of the Done button for zoomed form controls. */
    302 "Done" = "Done";
    303 
    304 /* Download Audio To Disk context menu item */
    305 "Download Audio" = "Download Audio";
    306 
    307 /* Download Image context menu item */
    308 "Download Image" = "Download Image";
    309 
    310 /* Download Linked File context menu item */
    311 "Download Linked File" = "Download Linked File";
    312 
    313 /* Download Video To Disk context menu item */
    314 "Download Video" = "Download Video";
    315 
    316 /* Undo action name */
    317 "Drag (Undo action name)" = "Drag";
    318 
    319 /* Video Enter Full Screen context menu item */
    320 "Enter Full Screen" = "Enter Full Screen";
    321 
    322 /* menu item */
    323 "Enter Picture in Picture" = "Enter Picture in Picture";
    324 
    325 /* Validation message for input form controls of type 'url' that have an invalid value */
    326 "Enter a URL" = "Enter a URL";
    327 
    328 /* Validation message for number fields where the user entered a non-number string */
    329 "Enter a number" = "Enter a number";
    330 
    331 /* Validation message for input form controls with value not respecting the step attribute */
    332 "Enter a valid value" = "Enter a valid value";
    333 
    334 /* Validation message for input form controls of type 'email' that have an invalid value */
    335 "Enter an email address" = "Enter an email address";
    336 
    337 /* Custom protocol synchronous load failure description */
    338 "Error handling synchronous load with custom protocol" = "Error handling synchronous load with custom protocol";
    339 
    340 /* Button for exiting full screen when in full screen media playback */
    341 "Exit Full Screen" = "Exit Full Screen";
    342 
    343 /* Full Screen Deceptive Website Exit Action */
    344 "Exit Full Screen (Element Full Screen)" = "Exit Full Screen";
    345 
    346 /* Video Exit Full Screen context menu item */
    347 "Exit Full Screen (context menu)" = "Exit Full Screen";
    348 
    349 /* menu item */
    350 "Exit Picture in Picture" = "Exit Picture in Picture";
    351 
    352 /* The requested file doesn't exist */
    353 "File does not exist" = "File does not exist";
    354 
    355 /* Validation message for required form control elements that have no value */
    356 "Fill out this field" = "Fill out this field";
    357 
    358 /* Default application name for Open With context menu */
    359 "Finder" = "Finder";
    360 
    361 /* Font context sub-menu item */
    362 "Font" = "Font";
    363 
    364 /* Undo action name */
    365 "Format Block (Undo action name)" = "Formatting";
    366 
    367 /* Forward context menu item */
    368 "Forward" = "Forward";
    369 
    370 /* WebKitErrorFrameLoadInterruptedByPolicyChange description */
    371 "Frame load interrupted" = "Frame load interrupted";
    372 
    373 /* Title of the Go button for zoomed form controls. */
    374 "Go" = "Go";
    375 
    376 /* Action from safe browsing warning */
    377 "Go Back" = "Go Back";
    378 
    379 /* Google Safe Browsing */
    380 "Google Safe Browsing" = "Google Safe Browsing";
    381 
    382 /* accessibility role description for web area */
    383 "HTML content" = "HTML content";
    384 
    385 /* Title of the Hide button for zoomed form controls. */
    386 "Hide" = "Hide";
    387 
    388 /* Hide Media Controls context menu item */
    389 "Hide Controls" = "Hide Controls";
    390 
    391 /* menu item title */
    392 "Hide Spelling and Grammar" = "Hide Spelling and Grammar";
    393 
    394 /* menu item title */
    395 "Hide Substitutions" = "Hide Substitutions";
    396 
    397 /* The default, default character encoding on Windows */
    398 "ISO-8859-1" = "ISO-8859-1";
    399 
    400 /* Phishing warning description */
    401 "If you believe this website is safe, you can %report-an-error%. Or, if you understand the risks involved, you can %bypass-link%." = "If you believe this website is safe, you can %report-an-error%. Or, if you understand the risks involved, you can %bypass-link%.";
    402 
    403 /* Action from safe browsing warning */
    404 "If you understand the risks involved, you can %visit-this-unsafe-site-link%." = "If you understand the risks involved, you can %visit-this-unsafe-site-link%.";
    405 
    406 /* Ignore Grammar context menu item */
    407 "Ignore Grammar" = "Ignore Grammar";
    408 
    409 /* Ignore Spelling context menu item */
    410 "Ignore Spelling" = "Ignore Spelling";
    411 
    412 /* Undo action name */
    413 "Indent (Undo action name)" = "Indent";
    414 
    415 /* Undo action name */
    416 "Insert Drawing (Undo action name)" = "Insert Drawing";
    417 
    418 /* Undo action name */
    419 "Insert List (Undo action name)" = "Insert List";
    420 
    421 /* Inspect Element context menu item */
    422 "Inspect Element" = "Inspect Element";
    423 
    424 /* Validation message for input form controls with a value not matching type */
    425 "Invalid value" = "Invalid value";
    426 
    427 /* Full Screen Deceptive Website Warning Sheet Title */
    428 "It looks like you are typing while in full screen" = "It looks like you are typing while in full screen";
    429 
    430 /* Italic context menu item */
    431 "Italic" = "Italic";
    432 
    433 /* Undo action name */
    434 "Italics (Undo action name)" = "Italics";
    435 
    436 /* WebKitErrorJavaUnavailable description */
    437 "Java is unavailable" = "Java is unavailable";
    438 
    439 /* Title for action sheet for JavaScript link */
    440 "JavaScript Action Sheet Title" = "JavaScript";
    441 
    442 /* WKErrorJavaScriptResultTypeIsUnsupported description */
    443 "JavaScript execution returned a result of an unsupported type" = "JavaScript execution returned a result of an unsupported type";
    444 
    445 /* Undo action name */
    446 "Justify (Undo action name)" = "Justify";
    447 
    448 /* Name of keychain key generated by the KEYGEN tag */
    449 "Key from %@" = "Key from %@";
    450 
    451 /* Learn Spelling context menu item */
    452 "Learn Spelling" = "Learn Spelling";
    453 
    454 /* Action from safe browsing warning */
    455 "Learn more…" = "Learn more…";
    456 
    457 /* Left to Right context menu item */
    458 "Left to Right" = "Left to Right";
    459 
    460 /* Media controller status message when watching a live broadcast */
    461 "Live Broadcast" = "Live Broadcast";
    462 
    463 /* Load request cancelled */
    464 "Load request cancelled" = "Load request cancelled";
    465 
    466 /* Media controller status message when the media is loading */
    467 "Loading…" = "Loading…";
    468 
    469 /* 'Website' name displayed when local documents have stored local data */
    470 "Local documents on your computer" = "Local documents on your computer";
    471 
    472 /* Look Up in Dictionary context menu item */
    473 "Look Up in Dictionary" = "Look Up in Dictionary";
    474 
    475 /* Look Up context menu item with selected word */
    476 "Look Up “%@”" = "Look Up “%@”";
    477 
    478 /* Look Up context menu item with selected word */
    479 "Look Up “%s”" = "Look Up “%s”";
    480 
    481 /* Look Up context menu item with selected word */
    482 "Look Up “<selection>”" = "Look Up “<selection>”";
    483 
    484 /* WKErrorContentRuleListStoreLookupFailed description */
    485 "Looking up a WKContentRuleList failed" = "Looking up a WKContentRuleList failed";
    486 
    487 /* WKErrorContentRuleListStoreVersionMismatch description */
    488 "Looking up a WKContentRuleList found a binary that is incompatible" = "Looking up a WKContentRuleList found a binary that is incompatible";
    489 
    490 /* Media Loop context menu item */
    491 "Loop" = "Loop";
    492 
    493 /* Undo action name */
    494 "Loosen Kerning (Undo action name)" = "Loosen Kerning";
    495 
    496 /* Undo action name */
    497 "Lower Baseline (Undo action name)" = "Lower Baseline";
    498 
    499 /* Month label in date picker */
    500 "MONTH (Date picker for extra zoom mode)" = "MONTH";
    501 
    502 /* Make Lower Case context menu item */
    503 "Make Lower Case" = "Make Lower Case";
    504 
    505 /* Make Upper Case context menu item */
    506 "Make Upper Case" = "Make Upper Case";
    507 
    508 /* Malware warning title */
    509 "Malware Website Warning" = "Malware Website Warning";
    510 
    511 /* Validation message for input form controls requiring a constrained value according to pattern */
    512 "Match the requested format" = "Match the requested format";
    513 
    514 /* Malware confirmation dialog */
    515 "Merely visiting a site is sufficient for malware to install itself and harm your computer." = "Merely visiting a site is sufficient for malware to install itself and harm your computer.";
    516 
    517 /* Label text to be used when a plugin is missing */
    518 "Missing Plug-in" = "Missing Plug-in";
    519 
    520 /* Media Mute context menu item */
    521 "Mute" = "Mute";
    522 
    523 /* No Guesses Found context menu item */
    524 "No Guesses Found" = "No Guesses Found";
    525 
    526 /* Empty select list */
    527 "No Options Select Popover" = "No Options";
    528 
    529 /* Label for only item in menu that appears when clicking on the search field image, when no searches have been performed */
    530 "No recent searches" = "No recent searches";
    531 
    532 /* Option in segmented control for choosing list type in text editing */
    533 "None" = "None";
    534 
    535 /* WebKitErrorCannotUseRestrictedPort description */
    536 "Not allowed to use restricted network port" = "Not allowed to use restricted network port";
    537 
    538 /* Option in segmented control for inserting a numbered list in text editing */
    539 "Numbered list" = "Numbered list";
    540 
    541 /* Title of the OK button for the number pad in zoomed form controls. */
    542 "OK (OK button title in extra zoomed number pad)" = "OK";
    543 
    544 /* OK button label in document password failure alert */
    545 "OK (document password failure alert)" = "OK";
    546 
    547 /* Menu item label for the track that represents disabling closed captions */
    548 "Off" = "Off";
    549 
    550 /* Title for Open Link action button */
    551 "Open" = "Open";
    552 
    553 /* Open Audio in New Window context menu item */
    554 "Open Audio in New Window" = "Open Audio in New Window";
    555 
    556 /* Open Frame in New Window context menu item */
    557 "Open Frame in New Window" = "Open Frame in New Window";
    558 
    559 /* Open Image in New Window context menu item */
    560 "Open Image in New Window" = "Open Image in New Window";
    561 
    562 /* Open Link context menu item */
    563 "Open Link" = "Open Link";
    564 
    565 /* Open in New Window context menu item */
    566 "Open Link in New Window" = "Open Link in New Window";
    567 
    568 /* Open Video in New Window context menu item */
    569 "Open Video in New Window" = "Open Video in New Window";
    570 
    571 /* Title for Open in Safari Link action button */
    572 "Open in Safari" = "Open in Safari";
    573 
    574 /* Title for Open in External Application Link action button */
    575 "Open in “%@”" = "Open in “%@”";
    576 
    577 /* context menu item for PDF */
    578 "Open with %@" = "Open with %@";
    579 
    580 /* Undo action name */
    581 "Outdent (Undo action name)" = "Outdent";
    582 
    583 /* Outline context menu item */
    584 "Outline" = "Outline";
    585 
    586 /* Undo action name */
    587 "Outline (Undo action name)" = "Outline";
    588 
    589 /* Paragraph direction context sub-menu item */
    590 "Paragraph Direction" = "Paragraph Direction";
    591 
    592 /* Paste context menu item */
    593 "Paste" = "Paste";
    594 
    595 /* Undo action name */
    596 "Paste (Undo action name)" = "Paste";
    597 
    598 /* Undo action name */
    599 "Paste Font (Undo action name)" = "Paste Font";
    600 
    601 /* Undo action name */
    602 "Paste Ruler (Undo action name)" = "Paste Ruler";
    603 
    604 /* Media Pause context menu item */
    605 "Pause" = "Pause";
    606 
    607 /* File Upload alert sheet button string for choosing an existing media item from the Photo Library */
    608 "Photo Library (file upload action sheet)" = "Photo Library";
    609 
    610 /* Media Play context menu item */
    611 "Play" = "Play";
    612 
    613 /* accessibility help text for enter full screen button */
    614 "Play movie in full screen mode" = "Play movie in full screen mode";
    615 
    616 /* Label text to be used when a plug-in was blocked from loading because it was too small */
    617 "Plug-In too small" = "Plug-In too small";
    618 
    619 /* Label text to be used if plugin host process has crashed */
    620 "Plug-in Failure" = "Plug-in Failure";
    621 
    622 /* WebKitErrorPlugInCancelledConnection description */
    623 "Plug-in cancelled" = "Plug-in cancelled";
    624 
    625 /* WebKitErrorPlugInWillHandleLoad description */
    626 "Plug-in handled load" = "Plug-in handled load";
    627 
    628 /* Description of the primary type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari. */
    629 "Portable Document Format" = "Portable Document Format";
    630 
    631 /* Description of the PostScript type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari. */
    632 "PostScript" = "PostScript";
    633 
    634 /* Undo action name */
    635 "Raise Baseline (Undo action name)" = "Raise Baseline";
    636 
    637 /* label for first item in the menu that appears when clicking on the search field image, used as embedded menu title */
    638 "Recent Searches" = "Recent Searches";
    639 
    640 /* Reload context menu item */
    641 "Reload" = "Reload";
    642 
    643 /* WKErrorContentRuleListStoreRemoveFailed description */
    644 "Removing a WKContentRuleList failed" = "Removing a WKContentRuleList failed";
    645 
    646 /* default label for Reset buttons in forms on web pages */
    647 "Reset" = "Reset";
    648 
    649 /* Right to Left context menu item */
    650 "Right to Left" = "Right to Left";
    651 
    652 /* Title of the Search button for zoomed form controls. */
    653 "Search" = "Search";
    654 
    655 /* Search in Spotlight context menu item */
    656 "Search in Spotlight" = "Search in Spotlight";
    657 
    658 /* Search the Web context menu item */
    659 "Search the Web" = "Search the Web";
    660 
    661 /* Search with search provider context menu item with provider name inserted */
    662 "Search with %@" = "Search with %@";
    663 
    664 /* Validation message for required file inputs that have no value */
    665 "Select a file" = "Select a file";
    666 
    667 /* Validation message for required menu list controls that have no selection */
    668 "Select an item in the list" = "Select an item in the list";
    669 
    670 /* Validation message for required radio boxes that have no selection */
    671 "Select one of these options" = "Select one of these options";
    672 
    673 /* Validation message for required checkboxes that have not be selected */
    674 "Select this checkbox" = "Select this checkbox";
    675 
    676 /* Selection direction context sub-menu item */
    677 "Selection Direction" = "Selection Direction";
    678 
    679 /* Set button below date picker */
    680 "Set (Button below date picker for extra zoom mode)" = "Set";
    681 
    682 /* Undo action name */
    683 "Set Background Color (Undo action name)" = "Set Background Color";
    684 
    685 /* Undo action name */
    686 "Set Color (Undo action name)" = "Set Color";
    687 
    688 /* Undo action name */
    689 "Set Font (Undo action name)" = "Set Font";
    690 
    691 /* Undo action name */
    692 "Set Traditional Character Shape (Undo action name)" = "Set Traditional Character Shape";
    693 
    694 /* Undo action name */
    695 "Set Writing Direction (Undo action name)" = "Set Writing Direction";
    696 
    697 /* Label for the set up with Apple Pay button. */
    698 "Set up with Apple Pay" = "Set up with Apple Pay";
    699 
    700 /* Title for Share action button */
    701 "Share…" = "Share…";
    702 
    703 /* Show colors context menu item */
    704 "Show Colors" = "Show Colors";
    705 
    706 /* Show Media Controls context menu item */
    707 "Show Controls" = "Show Controls";
    708 
    709 /* Action from safe browsing warning */
    710 "Show Details" = "Show Details";
    711 
    712 /* Show fonts context menu item */
    713 "Show Fonts" = "Show Fonts";
    714 
    715 /* menu item title */
    716 "Show Spelling and Grammar" = "Show Spelling and Grammar";
    717 
    718 /* menu item title */
    719 "Show Substitutions" = "Show Substitutions";
    720 
    721 /* Title of the context menu item to show when PDFPlugin was used instead of a blocked plugin */
    722 "Show in blocked plug-in" = "Show in blocked plug-in";
    723 
    724 /* Smart Copy/Paste context menu item */
    725 "Smart Copy/Paste" = "Smart Copy/Paste";
    726 
    727 /* Smart Dashes context menu item */
    728 "Smart Dashes" = "Smart Dashes";
    729 
    730 /* Smart Links context menu item */
    731 "Smart Links" = "Smart Links";
    732 
    733 /* Smart Quotes context menu item */
    734 "Smart Quotes" = "Smart Quotes";
    735 
    736 /* Title of the label to show on a snapshotted plug-in */
    737 "Snapshotted Plug-In" = "Snapshotted Plug-In";
    738 
    739 /* Speech context sub-menu item */
    740 "Speech" = "Speech";
    741 
    742 /* Spelling and Grammar context sub-menu item */
    743 "Spelling and Grammar" = "Spelling and Grammar";
    744 
    745 /* title for Start Debugging JavaScript menu item */
    746 "Start Debugging JavaScript" = "Start Debugging JavaScript";
    747 
    748 /* title for Start Profiling JavaScript menu item */
    749 "Start Profiling JavaScript" = "Start Profiling JavaScript";
    750 
    751 /* Start speaking context menu item */
    752 "Start Speaking" = "Start Speaking";
    753 
    754 /* Full Screen Deceptive Website Stay Action */
    755 "Stay in Full Screen (Element Full Screen)" = "Stay in Full Screen";
    756 
    757 /* Stop context menu item */
    758 "Stop" = "Stop";
    759 
    760 /* title for Stop Debugging JavaScript menu item */
    761 "Stop Debugging JavaScript" = "Stop Debugging JavaScript";
    762 
    763 /* title for Stop Profiling JavaScript menu item */
    764 "Stop Profiling JavaScript" = "Stop Profiling JavaScript";
    765 
    766 /* Stop speaking context menu item */
    767 "Stop Speaking" = "Stop Speaking";
    768 
    769 /* Undo action name */
    770 "StrikeThrough (Undo action name)" = "StrikeThrough";
    771 
    772 /* Label for strong password. */
    773 "Strong Password" = "Strong Password";
    774 
    775 /* Styles context menu item */
    776 "Styles…" = "Styles…";
    777 
    778 /* default label for Submit buttons in forms on web pages */
    779 "Submit" = "Submit";
    780 
    781 /* alt text for <input> elements with no alt, title, or value */
    782 "Submit (input element)" = "Submit";
    783 
    784 /* Label for the subcribe with Apple Pay button. */
    785 "Subscribe with Apple Pay" = "Subscribe with Apple Pay";
    786 
    787 /* Undo action name */
    788 "Subscript (Undo action name)" = "Subscript";
    789 
    790 /* Substitutions context sub-menu item */
    791 "Substitutions" = "Substitutions";
    792 
    793 /* Menu section heading for subtitles */
    794 "Subtitles" = "Subtitles";
    795 
    796 /* Accessibility announcement for the data list suggestions dropdown going away. */
    797 "Suggestions list hidden." = "Suggestions list hidden.";
    798 
    799 /* Accessibility announcement that the suggestions list became visible. The format argument is for the first option in the list. */
    800 "Suggestions list visible, %@" = "Suggestions list visible, %@";
    801 
    802 /* Undo action name */
    803 "Superscript (Undo action name)" = "Superscript";
    804 
    805 /* File Upload alert sheet camera button string for taking only photos */
    806 "Take Photo (file upload action sheet)" = "Take Photo";
    807 
    808 /* File Upload alert sheet camera button string for taking photos or videos */
    809 "Take Photo or Video (file upload action sheet)" = "Take Photo or Video";
    810 
    811 /* File Upload alert sheet camera button string for taking only videos */
    812 "Take Video (file upload action sheet)" = "Take Video";
    813 
    814 /* Tencent Safe Browsing */
    815 "Tencent Safe Browsing" = "Tencent Safe Browsing";
    816 
    817 /* Text Replacement context menu item */
    818 "Text Replacement" = "Text Replacement";
    819 
    820 /* WebKitErrorCannotShowURL description */
    821 "The URL can’t be shown" = "The URL can’t be shown";
    822 
    823 /* WebKitErrorBlockedByContentBlocker description */
    824 "The URL was blocked by a content blocker" = "The URL was blocked by a content blocker";
    825 
    826 /* WebKitErrorFrameLoadBlockedByContentFilter description */
    827 "The URL was blocked by a content filter" = "The URL was blocked by a content filter";
    828 
    829 /* WebKitErrorFrameLoadBlockedByRestrictions description */
    830 "The URL was blocked by device restrictions" = "The URL was blocked by device restrictions";
    831 
    832 /* WKErrorWebViewInvalidated description */
    833 "The WKWebView was invalidated" = "The WKWebView was invalidated";
    834 
    835 /* WKErrorWebContentProcessTerminated description */
    836 "The Web Content process was terminated" = "The Web Content process was terminated";
    837 
    838 /* WebKitErrorGeolocationLocationUnknown description */
    839 "The current location cannot be found." = "The current location cannot be found.";
    840 
    841 /* document password failure alert message */
    842 "The document could not be opened with that password." = "The document could not be opened with that password.";
    843 
    844 /* WebKitErrorCannotFindPlugin description */
    845 "The plug-in can’t be found" = "The plug-in can’t be found";
    846 
    847 /* WebKitErrorCannotLoadPlugin description */
    848 "The plug-in can’t be loaded" = "The plug-in can’t be loaded";
    849 
    850 /* prompt string in authentication panel */
    851 "The user name or password you entered for area “%@” on %@ was incorrect. Make sure you’re entering them correctly, and then try again." = "The user name or password you entered for area “%@” on %@ was incorrect. Make sure you’re entering them correctly, and then try again.";
    852 
    853 /* prompt string in authentication panel */
    854 "The user name or password you entered for the %@ proxy server %@ was incorrect. Make sure you’re entering them correctly, and then try again." = "The user name or password you entered for the %@ proxy server %@ was incorrect. Make sure you’re entering them correctly, and then try again.";
    855 
    856 /* prompt string in authentication panel */
    857 "The user name or password you entered for this area on %@ was incorrect. Make sure you’re entering them correctly, and then try again." = "The user name or password you entered for this area on %@ was incorrect. Make sure you’re entering them correctly, and then try again.";
    858 
    859 /* text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' */
    860 "This is a searchable index. Enter search keywords: " = "This is a searchable index. Enter search keywords: ";
    861 
    862 /* Malware warning */
    863 "This website may attempt to install dangerous software, which could harm your computer or steal your personal or financial information, like passwords, photos, or credit cards." = "This website may attempt to install dangerous software, which could harm your computer or steal your personal or financial information, like passwords, photos, or credit cards.";
    864 
    865 /* Phishing warning */
    866 "This website may try to trick you into doing something dangerous, like installing software or disclosing personal or financial information, like passwords, phone numbers, or credit cards." = "This website may try to trick you into doing something dangerous, like installing software or disclosing personal or financial information, like passwords, phone numbers, or credit cards.";
    867 
    868 /* Unwanted software warning */
    869 "This website may try to trick you into installing software that harms your browsing experience, like changing your settings without your permission or showing you unwanted ads. Once installed, it may be difficult to remove." = "This website may try to trick you into installing software that harms your browsing experience, like changing your settings without your permission or showing you unwanted ads. Once installed, it may be difficult to remove.";
    870 
    871 /* Informative text for requesting cross-site cookie and website data access. */
    872 "This will allow “%@” to track your activity." = "This will allow “%@” to track your activity.";
    873 
    874 /* Undo action name */
    875 "Tighten Kerning (Undo action name)" = "Tighten Kerning";
    876 
    877 /* WKErrorAttributedStringContentLoadTimedOut description */
    878 "Timed out while loading attributed string content" = "Timed out while loading attributed string content";
    879 
    880 /* prompt string in authentication panel */
    881 "To view this page, you must log in to area “%@” on %@." = "To view this page, you must log in to area “%@” on %@.";
    882 
    883 /* prompt string in authentication panel */
    884 "To view this page, you must log in to the %@ proxy server %@." = "To view this page, you must log in to the %@ proxy server %@.";
    885 
    886 /* prompt string in authentication panel */
    887 "To view this page, you must log in to this area on %@:" = "To view this page, you must log in to this area on %@:";
    888 
    889 /* Transformations context sub-menu item */
    890 "Transformations" = "Transformations";
    891 
    892 /* Undo action name */
    893 "Turn Off Kerning (Undo action name)" = "Turn Off Kerning";
    894 
    895 /* Undo action name */
    896 "Turn Off Ligatures (Undo action name)" = "Turn Off Ligatures";
    897 
    898 /* Undo action name */
    899 "Typing (Undo action name)" = "Typing";
    900 
    901 /* Full Screen Deceptive Website Warning Sheet Content Text */
    902 "Typing is not allowed in full screen websites. “%@” may be showing a fake keyboard to trick you into disclosing personal or financial information." = "Typing is not allowed in full screen websites. “%@” may be showing a fake keyboard to trick you into disclosing personal or financial information.";
    903 
    904 /* accessibility role description for a URL field. */
    905 "URL field" = "URL field";
    906 
    907 /* Unacceptable TLS certificate error */
    908 "Unacceptable TLS certificate" = "Unacceptable TLS certificate";
    909 
    910 /* Underline context menu item */
    911 "Underline" = "Underline";
    912 
    913 /* Undo action name */
    914 "Underline (Undo action name)" = "Underline";
    915 
    916 /* Menu item label for an audio track that has no other name */
    917 "Unknown (audio track)" = "Unknown";
    918 
    919 /* Unknown filesize FTP directory listing item */
    920 "Unknown (filesize)" = "Unknown";
    921 
    922 /* Menu item label for a text track that has no other name */
    923 "Unknown (text track)" = "Unknown";
    924 
    925 /* Undo action name */
    926 "Unlink (Undo action name)" = "Unlink";
    927 
    928 /* Undo action name */
    929 "Unscript (Undo action name)" = "Unscript";
    930 
    931 /* Label text to be used when an unsupported plug-in was blocked from loading */
    932 "Unsupported Plug-In" = "Unsupported Plug-in";
    933 
    934 /* Undo action name */
    935 "Use All Ligatures (Undo action name)" = "Use All Ligatures";
    936 
    937 /* Undo action name */
    938 "Use Standard Kerning (Undo action name)" = "Use Standard Kerning";
    939 
    940 /* Undo action name */
    941 "Use Standard Ligatures (Undo action name)" = "Use Standard Ligatures";
    942 
    943 /* Validation message for form control elements with a value shorter than minimum allowed length */
    944 "Use at least %d characters" = "Use at least %d characters";
    945 
    946 /* Validation message for form control elements with a value shorter than maximum allowed length */
    947 "Use no more than %d character(s)" = "Use no more than %d character(s)";
    948 
    949 /* Validation message for form control elements with a value shorter than maximum allowed length */
    950 "Use no more than %d characters" = "Use no more than %d characters";
    951 
    952 /* Description of WebCrypto master keys in Keychain */
    953 "Used to encrypt WebCrypto keys in persistent storage, such as IndexedDB" = "Used to encrypt WebCrypto keys in persistent storage, such as IndexedDB";
    954 
    955 /* The download was cancelled by the user */
    956 "User cancelled the download" = "User cancelled the download";
    957 
    958 /* Validation message for input form controls with value lower than allowed minimum */
    959 "Value must be greater than or equal to %@" = "Value must be greater than or equal to %@";
    960 
    961 /* Validation message for input form controls with value lower than allowed minimum */
    962 "Value must be greater than or equal to %s" = "Value must be greater than or equal to %s";
    963 
    964 /* Validation message for input form controls with value higher than allowed maximum */
    965 "Value must be less than or equal to %@" = "Value must be less than or equal to %@";
    966 
    967 /* Validation message for input form controls with value higher than allowed maximum */
    968 "Value must be less than or equal to %s" = "Value must be less than or equal to %s";
    969 
    970 /* Phishing warning description */
    971 "Warnings are shown for websites that have been reported as deceptive. Deceptive websites try to trick you into believing they are legitimate websites you trust." = "Warnings are shown for websites that have been reported as deceptive. Deceptive websites try to trick you into believing they are legitimate websites you trust.";
    972 
    973 /* Unwanted software warning description */
    974 "Warnings are shown for websites where harmful software has been detected. You can check %the-status-of-site% on the %safeBrowsingProvider% diagnostic page." = "Warnings are shown for websites where harmful software has been detected. You can check %the-status-of-site% on the %safeBrowsingProvider% diagnostic page.";
    975 
    976 /* Malware warning description */
    977 "Warnings are shown for websites where malicious software has been detected. You can check the %status-link% on the %safeBrowsingProvider% diagnostic page." = "Warnings are shown for websites where malicious software has been detected. You can check the %status-link% on the %safeBrowsingProvider% diagnostic page.";
    978 
    979 /* Web Inspector window title when inspecting Web Inspector */
    980 "Web Inspector [%d] — %@" = "Web Inspector [%d] — %@";
    981 
    982 /* Web Inspector window title */
    983 "Web Inspector — %@" = "Web Inspector — %@";
    984 
    985 /* Pseudo plug-in name, visible in the Installed Plug-ins page in Safari. */
    986 "WebKit built-in PDF" = "WebKit built-in PDF";
    987 
    988 /* WebKitErrorInternal description */
    989 "WebKit encountered an internal error" = "WebKit encountered an internal error";
    990 
    991 /* Unwanted software warning title */
    992 "Website With Harmful Software Warning" = "Website With Harmful Software Warning";
    993 
    994 /* Year label in date picker */
    995 "YEAR (Date picker for extra zoom mode)" = "YEAR";
    996 
    997 /* message in authentication panel */
    998 "Your login information will be sent securely." = "Your login information will be sent securely.";
    999 
    1000 /* message in authentication panel */
    1001 "Your password will be sent unencrypted." = "Your password will be sent unencrypted.";
    1002 
    1003 /* HTTP result code string */
    1004 "accepted" = "accepted";
    1005 
    1006 /* Verb stating the action that will occur when a text field is selected, as used by accessibility */
    1007 "activate" = "activate";
    1008 
    1009 /* An ARIA accessibility group that acts as an alert. */
    1010 "alert" = "alert";
    1011 
    1012 /* An ARIA accessibility group that acts as a status update. */
    1013 "application status" = "application status";
    1014 
    1015 /* An ARIA accessibility group that acts as an article. */
    1016 "article" = "article";
    1017 
    1018 /* accessibility role description for an attachment element */
    1019 "attachment" = "attachment";
    1020 
    1021 /* accessibility help text for audio element controller */
    1022 "audio element playback controls and status display" = "audio element playback controls and status display";
    1023 
    1024 /* accessibility label for audio element controller */
    1025 "audio playback" = "audio playback";
    1026 
    1027 /* accessibility label for seek back 30 seconds button */
    1028 "back 30 seconds" = "back 30 seconds";
    1029 
    1030 /* HTTP result code string */
    1031 "bad gateway" = "bad gateway";
    1032 
    1033 /* HTTP result code string */
    1034 "bad request" = "bad request";
    1035 
    1036 /* An ARIA accessibility group that acts as a banner. */
    1037 "banner" = "banner";
    1038 
    1039 /* accessibility help text for play button */
    1040 "begin playback" = "begin playback";
    1041 
    1042 /* accessibility description for a search field cancel button */
    1043 "cancel" = "cancel";
    1044 
    1045 /* Verb stating the action that will occur when an unchecked checkbox is clicked, as used by accessibility */
    1046 "check" = "check";
    1047 
    1048 /* HTTP result code string */
    1049 "client error" = "client error";
    1050 
    1051 /* accessibility role description for a color well */
    1052 "color well" = "color well";
    1053 
    1054 /* An ARIA accessibility group that acts as a region of complementary information. */
    1055 "complementary" = "complementary";
    1056 
    1057 /* HTTP result code string */
    1058 "conflict" = "conflict";
    1059 
    1060 /* Label for the AutoFill contacts button inside a text field. */
    1061 "contact info AutoFill" = "contact info AutoFill";
    1062 
    1063 /* An ARIA accessibility group that contains content. */
    1064 "content information" = "content information";
    1065 
    1066 /* HTTP result code string */
    1067 "continue" = "continue";
    1068 
    1069 /* HTTP result code string */
    1070 "created" = "created";
    1071 
    1072 /* Label for the credit card AutoFill button inside a text field. */
    1073 "credit card AutoFill" = "credit card AutoFill";
    1074 
    1075 /* The less good value description for a meter element. */
    1076 "critical value" = "critical value";
    1077 
    1078 /* accessibility help text for movie status display */
    1079 "current movie status" = "current movie status";
    1080 
    1081 /* accessibility help text for elapsed time display */
    1082 "current movie time in seconds" = "current movie time in seconds";
    1083 
    1084 /* accessibility role description for a date and time field. */
    1085 "date and time field" = "date and time field";
    1086 
    1087 /* accessibility role description for a date field. */
    1088 "date field" = "date field";
    1089 
    1090 /* role description of ARIA definition role */
    1091 "definition" = "definition";
    1092 
    1093 /* description detail */
    1094 "description" = "description";
    1095 
    1096 /* accessibility role description of a description list */
    1097 "description list" = "description list";
    1098 
    1099 /* accessibility role description for a details element */
    1100 "details" = "details";
    1101 
    1102 /* An ARIA accessibility group that acts as a document. */
    1103 "document" = "document";
    1104 
    1105 /* accessibility label for elapsed time display */
    1106 "elapsed time" = "elapsed time";
    1107 
    1108 /* accessibility role description for an email field. */
    1109 "email field" = "email field";
    1110 
    1111 /* accessibility label for enter full screen button */
    1112 "enter full screen" = "enter full screen";
    1113 
    1114 /* accessibility label for exit full screen button */
    1115 "exit full screen" = "exit full screen";
    1116 
    1117 /* HTTP result code string */
    1118 "expectation failed" = "expectation failed";
    1119 
    1120 /* accessibility label for fast forward button */
    1121 "fast forward" = "fast forward";
    1122 
    1123 /* accessibility label for fast reverse button */
    1124 "fast reverse" = "fast reverse";
    1125 
    1126 /* accessibility role description for a group containing a scrollable list of articles. */
    1127 "feed" = "feed";
    1128 
    1129 /* accessibility role description for a figure element. */
    1130 "figure" = "figure";
    1131 
    1132 /* accessibility role description for a file upload button */
    1133 "file upload button" = "file upload button";
    1134 
    1135 /* accessibility role description for a footer */
    1136 "footer" = "footer";
    1137 
    1138 /* HTTP result code string */
    1139 "forbidden" = "forbidden";
    1140 
    1141 /* HTTP result code string */
    1142 "found" = "found";
    1143 
    1144 /* HTTP result code string */
    1145 "gateway timed out" = "gateway timed out";
    1146 
    1147 /* accessibility role description for headings */
    1148 "heading" = "heading";
    1149 
    1150 /* accessibility label for hide closed captions button */
    1151 "hide closed captions" = "hide closed captions";
    1152 
    1153 /* accessibility role description for a mark element */
    1154 "highlighted" = "highlighted";
    1155 
    1156 /* accessibility role description for image map */
    1157 "image map" = "image map";
    1158 
    1159 /* accessibility help text for an indefinite media controller time value */
    1160 "indefinite time" = "indefinite time";
    1161 
    1162 /* HTTP result code string */
    1163 "informational" = "informational";
    1164 
    1165 /* HTTP result code string */
    1166 "internal server error" = "internal server error";
    1167 
    1168 /* Verb stating the action that will occur when a link is clicked, as used by accessibility */
    1169 "jump" = "jump";
    1170 
    1171 /* HTTP result code string */
    1172 "length required" = "length required";
    1173 
    1174 /* accessibility role description for link */
    1175 "link" = "link";
    1176 
    1177 /* accessibility role description for list marker */
    1178 "list marker" = "list marker";
    1179 
    1180 /* An ARIA accessibility group that acts as a console log. */
    1181 "log" = "log";
    1182 
    1183 /* An ARIA accessibility group that is the main portion of the website. */
    1184 "main" = "main";
    1185 
    1186 /* An ARIA accessibility group that acts as a marquee. */
    1187 "marquee" = "marquee";
    1188 
    1189 /* An ARIA accessibility group that contains mathematical symbols. */
    1190 "math" = "math";
    1191 
    1192 /* HTTP result code string */
    1193 "method not allowed" = "method not allowed";
    1194 
    1195 /* accessibility role description for a month field. */
    1196 "month and year field" = "month and year field";
    1197 
    1198 /* HTTP result code string */
    1199 "moved permanently" = "moved permanently";
    1200 
    1201 /* accessibility label for timeline slider */
    1202 "movie time" = "movie time";
    1203 
    1204 /* accessibility help text for timeline slider */
    1205 "movie time scrubber" = "movie time scrubber";
    1206 
    1207 /* accessibility help text for timeline slider thumb */
    1208 "movie time scrubber thumb" = "movie time scrubber thumb";
    1209 
    1210 /* HTTP result code string */
    1211 "multiple choices" = "multiple choices";
    1212 
    1213 /* accessibility label for mute button */
    1214 "mute" = "mute";
    1215 
    1216 /* accessibility help text for mute button */
    1217 "mute audio tracks" = "mute audio tracks";
    1218 
    1219 /* An ARIA accessibility group that contains the main navigation elements of a website. */
    1220 "navigation" = "navigation";
    1221 
    1222 /* HTTP result code string */
    1223 "needs proxy" = "needs proxy";
    1224 
    1225 /* HTTP result code string */
    1226 "no content" = "no content";
    1227 
    1228 /* HTTP result code string */
    1229 "no error" = "no error";
    1230 
    1231 /* text to display in file button used in HTML forms when no file is selected */
    1232 "no file selected" = "no file selected";
    1233 
    1234 /* text to display in file button used in HTML forms when no files are selected and the button allows multiple files to be selected */
    1235 "no files selected" = "no files selected";
    1236 
    1237 /* HTTP result code string */
    1238 "no longer exists" = "no longer exists";
    1239 
    1240 /* Text to display in file button used in HTML forms for media files when no media files are selected and the button allows multiple files to be selected */
    1241 "no media selected (multiple)" = "no media selected (multiple)";
    1242 
    1243 /* Text to display in file button used in HTML forms for media files when no media file is selected */
    1244 "no media selected (single)" = "no media selected (single)";
    1245 
    1246 /* HTTP result code string */
    1247 "non-authoritative information" = "non-authoritative information";
    1248 
    1249 /* HTTP result code string */
    1250 "not found" = "not found";
    1251 
    1252 /* HTTP result code string */
    1253 "not modified" = "not modified";
    1254 
    1255 /* An ARIA accessibility group that acts as a note in a document. */
    1256 "note" = "note";
    1257 
    1258 /* accessibility role description for a number field. */
    1259 "number field" = "number field";
    1260 
    1261 /* accessibility help text for remaining time display */
    1262 "number of seconds of movie remaining" = "number of seconds of movie remaining";
    1263 
    1264 /* The optimum value description for a meter element. */
    1265 "optimal value" = "optimal value";
    1266 
    1267 /* accessibility role description for an output element */
    1268 "output" = "output";
    1269 
    1270 /* HTTP result code string */
    1271 "partial content" = "partial content";
    1272 
    1273 /* Label for the AutoFill credentials button inside a text field. */
    1274 "password AutoFill" = "password AutoFill";
    1275 
    1276 /* accessibility label for pause button */
    1277 "pause" = "pause";
    1278 
    1279 /* accessibility help text for pause button */
    1280 "pause playback" = "pause playback";
    1281 
    1282 /* HTTP result code string */
    1283 "payment required" = "payment required";
    1284 
    1285 /* accessibility label for play button */
    1286 "play" = "play";
    1287 
    1288 /* HTTP result code string */
    1289 "precondition failed" = "precondition failed";
    1290 
    1291 /* Verb stating the action that will occur when a button is pressed, as used by accessibility */
    1292 "press" = "press";
    1293 
    1294 /* HTTP result code string */
    1295 "proxy authentication required" = "proxy authentication required";
    1296 
    1297 /* Validation message for input form controls with value higher than allowed maximum */
    1298 "range overflow" = "range overflow";
    1299 
    1300 /* Validation message for input form controls with value lower than allowed minimum */
    1301 "range underflow" = "range underflow";
    1302 
    1303 /* HTTP result code string */
    1304 "redirected" = "redirected";
    1305 
    1306 /* An ARIA accessibility group that acts as a distinct region in a document. */
    1307 "region" = "region";
    1308 
    1309 /* accessibility label for time remaining display */
    1310 "remaining time" = "remaining time";
    1311 
    1312 /* Action from safe browsing warning */
    1313 "report an error" = "report an error";
    1314 
    1315 /* HTTP result code string */
    1316 "request timed out" = "request timed out";
    1317 
    1318 /* HTTP result code string */
    1319 "request too large" = "request too large";
    1320 
    1321 /* HTTP result code string */
    1322 "requested URL too long" = "requested URL too long";
    1323 
    1324 /* HTTP result code string */
    1325 "requested range not satisfiable" = "requested range not satisfiable";
    1326 
    1327 /* Reset button in date input popover */
    1328 "Reset Button Date/Time Context Menu" = "Reset";
    1329 
    1330 /* HTTP result code string */
    1331 "reset content" = "reset content";
    1332 
    1333 /* accessibility help text for return streaming movie to real time button */
    1334 "resume real time streaming" = "resume real time streaming";
    1335 
    1336 /* accessibility label for return to real time button */
    1337 "return to real time" = "return to real time";
    1338 
    1339 /* An ARIA accessibility group that contains a search feature of a website. */
    1340 "search" = "search";
    1341 
    1342 /* HTTP result code string */
    1343 "see other" = "see other";
    1344 
    1345 /* accessibility help text for jump back 30 seconds button */
    1346 "seek movie back 30 seconds" = "seek movie back 30 seconds";
    1347 
    1348 /* accessibility help text for fast rewind button */
    1349 "seek quickly back" = "seek quickly back";
    1350 
    1351 /* accessibility help text for fast forward button */
    1352 "seek quickly forward" = "seek quickly forward";
    1353 
    1354 /* Verb stating the action that will occur when a radio button is clicked, as used by accessibility */
    1355 "select" = "select";
    1356 
    1357 /* accessibility role description for a horizontal rule [<hr>] */
    1358 "separator" = "separator";
    1359 
    1360 /* HTTP result code string */
    1361 "server error" = "server error";
    1362 
    1363 /* HTTP result code string */
    1364 "service unavailable" = "service unavailable";
    1365 
    1366 /* accessibility label for show closed captions button */
    1367 "show closed captions" = "show closed captions";
    1368 
    1369 /* accessibility help text for show closed captions button */
    1370 "start displaying closed captions" = "start displaying closed captions";
    1371 
    1372 /* accessibility label for movie status */
    1373 "status" = "status";
    1374 
    1375 /* accessibility help text for hide closed captions button */
    1376 "stop displaying closed captions" = "stop displaying closed captions";
    1377 
    1378 /* Label for the strong password AutoFill button inside a text field. */
    1379 "strong password AutoFill" = "strong password AutoFill";
    1380 
    1381 /* The suboptimal value description for a meter element. */
    1382 "suboptimal value" = "suboptimal value";
    1383 
    1384 /* HTTP result code string */
    1385 "success" = "success";
    1386 
    1387 /* accessibility role description for a summary element */
    1388 "summary" = "summary";
    1389 
    1390 /* HTTP result code string */
    1391 "switching protocols" = "switching protocols";
    1392 
    1393 /* An ARIA accessibility group that contains the content of a tab. */
    1394 "tab panel" = "tab panel";
    1395 
    1396 /* accessibility role description for a telephone number field. */
    1397 "telephone number field" = "telephone number field";
    1398 
    1399 /* HTTP result code string */
    1400 "temporarily redirected" = "temporarily redirected";
    1401 
    1402 /* term word of a description list */
    1403 "term" = "term";
    1404 
    1405 /* Part of malware description */
    1406 "the status of “%site%”" = "the status of “%site%”";
    1407 
    1408 /* accessibility role description for a time field. */
    1409 "time field" = "time field";
    1410 
    1411 /* accessibility label for timeline thumb */
    1412 "timeline slider thumb" = "timeline slider thumb";
    1413 
    1414 /* An ARIA accessibility group that acts as an updating timer. */
    1415 "timer" = "timer";
    1416 
    1417 /* An ARIA accessibility group that acts as a tooltip. */
    1418 "tooltip" = "tooltip";
    1419 
    1420 /* HTTP result code string */
    1421 "unacceptable" = "unacceptable";
    1422 
    1423 /* HTTP result code string */
    1424 "unauthorized" = "unauthorized";
    1425 
    1426 /* Verb stating the action that will occur when a checked checkbox is clicked, as used by accessibility */
    1427 "uncheck" = "uncheck";
    1428 
    1429 /* HTTP result code string */
    1430 "unimplemented" = "unimplemented";
    1431 
    1432 /* Unknown filename */
    1433 "unknown" = "unknown";
    1434 
    1435 /* accessibility label for turn mute off button */
    1436 "unmute" = "unmute";
    1437 
    1438 /* accessibility help text for un mute button */
    1439 "unmute audio tracks" = "unmute audio tracks";
    1440 
    1441 /* HTTP result code string */
    1442 "unsupported media type" = "unsupported media type";
    1443 
    1444 /* HTTP result code string */
    1445 "unsupported version" = "unsupported version";
    1446 
    1447 /* accessibility help text for video element controller */
    1448 "video element playback controls and status display" = "video element playback controls and status display";
    1449 
    1450 /* accessibility label for video element controller */
    1451 "video playback" = "video playback";
    1452 
    1453 /* Action from safe browsing warning */
    1454 "visit this unsafe website" = "visit this unsafe website";
    1455 
    1456 /* An ARIA accessibility group that acts as an alert dialog. */
    1457 "web alert dialog" = "web alert dialog";
    1458 
    1459 /* An ARIA accessibility group that acts as an application. */
    1460 "web application" = "web application";
    1461 
    1462 /* An ARIA accessibility group that acts as an dialog. */
    1463 "web dialog" = "web dialog";
    1464 
    1465 /* accessibility role description for a time field. */
    1466 "week and year field" = "week and year field";
    1467 
    1468 /* Message for requesting access to the device motion and orientation */
    1469 "“%@” Would Like to Access Motion and Orientation" = "“%@” Would Like to Access Motion and Orientation";
    1470 
    14711474/* Option in segmented control for choosing list type in text editing */
    14721475"•" = "•";
  • trunk/Source/WebKit/ChangeLog

    r261912 r261921  
     12020-05-20  Andy Estes  <aestes@apple.com>
     2
     3        [Mac] UI processes spin when creating the "Share" context menu item
     4        https://bugs.webkit.org/show_bug.cgi?id=212137
     5        <rdar://problem/54498394>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        On Mac, WebKit has been using the +[NSMenuItem standardShareMenuItemForItems:] SPI to create
     10        the "Share" context submenu and menu item. This call performs synchronous IPC and can result
     11        in UI process spins.
     12
     13        Where available, switch to using the asynchronous
     14        -[NSSharingServicePicker getMenuWithCompletion:] SPI instead. This method only creates the
     15        submenu, not the menu item, so when using this new method we must create the "Share" menu
     16        item ourselves.
     17
     18        * UIProcess/mac/WebContextMenuProxyMac.h:
     19        * UIProcess/mac/WebContextMenuProxyMac.mm:
     20        (WebKit::getStandardShareMenuItem):
     21        (WebKit::WebContextMenuProxyMac::getShareMenuItem):
     22        (WebKit::WebContextMenuProxyMac::getContextMenuFromItems):
     23        (WebKit::WebContextMenuProxyMac::getContextMenuItem):
     24        (WebKit::WebContextMenuProxyMac::showContextMenuWithItems):
     25        (WebKit::WebContextMenuProxyMac::createShareMenuItem): Deleted.
     26        (WebKit::WebContextMenuProxyMac::createContextMenuFromItems): Deleted.
     27        (WebKit::WebContextMenuProxyMac::createContextMenuItem): Deleted.
     28
    1292020-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>
    230
  • trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.h

    r227001 r261921  
    6969
    7070    RefPtr<WebContextMenuListenerProxy> m_contextMenuListener;
    71     RetainPtr<NSMenuItem> createContextMenuItem(const WebContextMenuItemData&);
    72     RetainPtr<NSMenu> createContextMenuFromItems(const Vector<WebContextMenuItemData>&);
     71    void getContextMenuItem(const WebContextMenuItemData&, CompletionHandler<void(NSMenuItem *)>&&);
     72    void getContextMenuFromItems(const Vector<WebContextMenuItemData>&, CompletionHandler<void(NSMenu *)>&&);
    7373    void showContextMenu();
    7474
    7575#if ENABLE(SERVICE_CONTROLS)
    76     RetainPtr<NSMenuItem> createShareMenuItem();
     76    void getShareMenuItem(CompletionHandler<void(NSMenuItem *)>&&);
    7777    void showServicesMenu();
    7878    void setupServicesMenu();
  • trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm

    r242339 r261921  
    4545#import <WebCore/GraphicsContext.h>
    4646#import <WebCore/IntRect.h>
     47#import <WebCore/LocalizedStrings.h>
    4748#import <pal/spi/mac/NSMenuSPI.h>
    4849#import <pal/spi/mac/NSSharingServicePickerSPI.h>
     
    261262}
    262263
    263 RetainPtr<NSMenuItem> WebContextMenuProxyMac::createShareMenuItem()
     264static void getStandardShareMenuItem(NSArray *items, void (^completionHandler)(NSMenuItem *))
     265{
     266#if HAVE(NSSHARINGSERVICEPICKER_ASYNC_MENUS)
     267    // FIXME (<rdar://problem/54551500>): Replace this with the async variant of +[NSMenuItem standardShareMenuItemForItems:] when it's available.
     268    auto sharingServicePicker = adoptNS([[NSSharingServicePicker alloc] initWithItems:items]);
     269    [sharingServicePicker setStyle:NSSharingServicePickerStyleMenu];
     270    [sharingServicePicker getMenuWithCompletion:^(NSMenu *shareMenu) {
     271        ASSERT(isMainThread());
     272        shareMenu.delegate = (id <NSMenuDelegate>)sharingServicePicker.get();
     273        auto shareMenuItem = adoptNS([[NSMenuItem alloc] initWithTitle:WEB_UI_STRING("Share", "Title for Share context menu item.") action:nil keyEquivalent:@""]);
     274        [shareMenuItem setRepresentedObject:sharingServicePicker.get()];
     275        [shareMenuItem setSubmenu:shareMenu];
     276        completionHandler(shareMenuItem.get());
     277    }];
     278#else
     279    completionHandler([NSMenuItem standardShareMenuItemForItems:items]);
     280#endif
     281}
     282
     283void WebContextMenuProxyMac::getShareMenuItem(CompletionHandler<void(NSMenuItem *)>&& completionHandler)
    264284{
    265285    const WebHitTestResultData& hitTestData = m_context.webHitTestResultData();
     
    287307        [items addObject:(NSString *)m_context.selectedText()];
    288308
    289     if (![items count])
    290         return nil;
    291 
    292     RetainPtr<NSMenuItem> item = [NSMenuItem standardShareMenuItemForItems:items.get()];
    293     if (!item)
    294         return nil;
    295 
    296     NSSharingServicePicker *sharingServicePicker = [item representedObject];
    297     sharingServicePicker.delegate = [WKSharingServicePickerDelegate sharedSharingServicePickerDelegate];
    298 
    299     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setFiltersEditingServices:NO];
    300     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setHandlesEditingReplacement:NO];
    301     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setMenuProxy:this];
    302 
    303     // Setting the picker lets the delegate retain it to keep it alive, but this picker is kept alive by the menu item.
    304     [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setPicker:nil];
    305 
    306     [item setIdentifier:_WKMenuItemIdentifierShareMenu];
    307 
    308     return item;
     309    if (![items count]) {
     310        completionHandler(nil);
     311        return;
     312    }
     313
     314    getStandardShareMenuItem(items.get(), makeBlockPtr([completionHandler = WTFMove(completionHandler), protectedThis = makeRef(*this), this](NSMenuItem *item) mutable {
     315        if (!item) {
     316            completionHandler(nil);
     317            return;
     318        }
     319
     320        NSSharingServicePicker *sharingServicePicker = item.representedObject;
     321        WKSharingServicePickerDelegate *sharingServicePickerDelegate = WKSharingServicePickerDelegate.sharedSharingServicePickerDelegate;
     322        sharingServicePicker.delegate = sharingServicePickerDelegate;
     323
     324        sharingServicePickerDelegate.filtersEditingServices = NO;
     325        sharingServicePickerDelegate.handlesEditingReplacement = NO;
     326        sharingServicePickerDelegate.menuProxy = this;
     327
     328        // Setting the picker lets the delegate retain it to keep it alive, but this picker is kept alive by the menu item.
     329        sharingServicePickerDelegate.picker = nil;
     330
     331        item.identifier = _WKMenuItemIdentifierShareMenu;
     332
     333        completionHandler(item);
     334    }).get());
    309335}
    310336#endif
     
    324350}
    325351
    326 RetainPtr<NSMenu> WebContextMenuProxyMac::createContextMenuFromItems(const Vector<WebContextMenuItemData>& items)
     352void WebContextMenuProxyMac::getContextMenuFromItems(const Vector<WebContextMenuItemData>& items, CompletionHandler<void(NSMenu *)>&& completionHandler)
    327353{
    328354    auto menu = adoptNS([[NSMenu alloc] initWithTitle:@""]);
    329355    [menu setAutoenablesItems:NO];
    330356
    331     for (auto& item : items) {
    332         if (auto menuItem = createContextMenuItem(item))
    333             [menu addItem:menuItem.get()];
    334     }
    335 
    336     return menu;
     357    if (items.isEmpty()) {
     358        completionHandler(menu.get());
     359        return;
     360    }
     361
     362    auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]);
     363    auto insertMenuItem = makeBlockPtr([completionHandler = WTFMove(completionHandler), itemsRemaining = items.size(), menu = WTFMove(menu), sparseMenuItems](NSMenuItem *item, NSUInteger index) mutable {
     364        ASSERT(index < [sparseMenuItems count]);
     365        ASSERT(![sparseMenuItems pointerAtIndex:index]);
     366        [sparseMenuItems replacePointerAtIndex:index withPointer:item];
     367        if (--itemsRemaining)
     368            return;
     369
     370        [menu setItemArray:[sparseMenuItems allObjects]];
     371        completionHandler(menu.get());
     372    });
     373
     374    for (size_t i = 0; i < items.size(); ++i) {
     375        [sparseMenuItems addPointer:nullptr];
     376        getContextMenuItem(items[i], [insertMenuItem, i](NSMenuItem *menuItem) {
     377            insertMenuItem(menuItem, i);
     378        });
     379    }
    337380}
    338381
     
    417460}
    418461
    419 RetainPtr<NSMenuItem> WebContextMenuProxyMac::createContextMenuItem(const WebContextMenuItemData& item)
     462void WebContextMenuProxyMac::getContextMenuItem(const WebContextMenuItemData& item, CompletionHandler<void(NSMenuItem *)>&& completionHandler)
    420463{
    421464#if ENABLE(SERVICE_CONTROLS)
    422     if (item.action() == ContextMenuItemTagShareMenu)
    423         return createShareMenuItem();
     465    if (item.action() == ContextMenuItemTagShareMenu) {
     466        getShareMenuItem(WTFMove(completionHandler));
     467        return;
     468    }
    424469#endif
    425470
     
    440485        }
    441486
    442         return menuItem;
     487        completionHandler(menuItem.get());
     488        return;
    443489    }
    444490
    445491    case WebCore::SeparatorType:
    446         return [NSMenuItem separatorItem];
     492        completionHandler(NSMenuItem.separatorItem);
     493        return;
    447494
    448495    case WebCore::SubmenuType: {
    449         auto menuItem = adoptNS([[NSMenuItem alloc] initWithTitle:item.title() action:nullptr keyEquivalent:@""]);
    450         [menuItem setEnabled:item.enabled()];
    451         [menuItem setSubmenu:createContextMenuFromItems(item.submenu()).get()];
    452         [menuItem setIdentifier:menuItemIdentifier(item.action())];
    453 
    454         return menuItem;
     496        getContextMenuFromItems(item.submenu(), [action = item.action(), completionHandler = WTFMove(completionHandler), enabled = item.enabled(), title = item.title()](NSMenu *menu) mutable {
     497            auto menuItem = adoptNS([[NSMenuItem alloc] initWithTitle:title action:nullptr keyEquivalent:@""]);
     498            [menuItem setEnabled:enabled];
     499            [menuItem setSubmenu:menu];
     500            [menuItem setIdentifier:menuItemIdentifier(action)];
     501            completionHandler(menuItem.get());
     502        });
     503        return;
    455504    }
    456505    }
     
    469518    for (auto& item : items)
    470519        data.uncheckedAppend(item->data());
    471    
    472     auto menu = createContextMenuFromItems(data);
    473     [[WKMenuTarget sharedMenuTarget] setMenuProxy:this];
    474     m_page.contextMenuClient().menuFromProposedMenu(m_page, menu.get(), m_context.webHitTestResultData(), m_userData.object(), [this, protectedThis = makeRef(*this)] (RetainPtr<NSMenu>&& menu) {
    475         m_menu = WTFMove(menu);
    476         NSPoint menuLocation = [m_webView convertPoint:m_context.menuLocation() toView:nil];
    477         NSEvent *event = [NSEvent mouseEventWithType:NSEventTypeRightMouseUp location:menuLocation modifierFlags:0 timestamp:0 windowNumber:m_webView.window.windowNumber context:nil eventNumber:0 clickCount:0 pressure:0];
    478         [NSMenu popUpContextMenu:m_menu.get() withEvent:event forView:m_webView];
    479        
    480         if (m_contextMenuListener) {
    481             m_contextMenuListener->invalidate();
    482             m_contextMenuListener = nullptr;
    483         }
     520
     521    getContextMenuFromItems(data, [protectedThis = makeRef(*this), this](NSMenu *menu) mutable {
     522        [[WKMenuTarget sharedMenuTarget] setMenuProxy:this];
     523        m_page.contextMenuClient().menuFromProposedMenu(m_page, menu, m_context.webHitTestResultData(), m_userData.object(), [this, protectedThis = WTFMove(protectedThis)] (RetainPtr<NSMenu>&& menu) {
     524            m_menu = WTFMove(menu);
     525            NSPoint menuLocation = [m_webView convertPoint:m_context.menuLocation() toView:nil];
     526            NSEvent *event = [NSEvent mouseEventWithType:NSEventTypeRightMouseUp location:menuLocation modifierFlags:0 timestamp:0 windowNumber:m_webView.window.windowNumber context:nil eventNumber:0 clickCount:0 pressure:0];
     527            [NSMenu popUpContextMenu:m_menu.get() withEvent:event forView:m_webView];
     528
     529            if (m_contextMenuListener) {
     530                m_contextMenuListener->invalidate();
     531                m_contextMenuListener = nullptr;
     532            }
     533        });
    484534    });
    485535}
Note: See TracChangeset for help on using the changeset viewer.