1 /* 2 * Copyright (C) 2010 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef WKSharedAPICast_h 27 #define WKSharedAPICast_h 28 29 #include "ImageOptions.h" 30 #include "SameDocumentNavigationType.h" 31 #include "WKBase.h" 32 #include "WKContextMenuItemTypes.h" 33 #include "WKEvent.h" 34 #include "WKFindOptions.h" 35 #include "WKGeometry.h" 36 #include "WKImage.h" 37 #include "WKPageLoadTypes.h" 38 #include "WebError.h" 39 #include "WebEvent.h" 40 #include "WebFindOptions.h" 41 #include "WebNumber.h" 42 #include "WebString.h" 43 #include "WebURL.h" 44 #include "WebURLRequest.h" 45 #include "WebURLResponse.h" 46 #include <WebCore/ContextMenuItem.h> 47 #include <WebCore/FloatRect.h> 48 #include <WebCore/FrameLoaderTypes.h> 49 #include <WebCore/IntRect.h> 50 #include <wtf/TypeTraits.h> 51 52 namespace WebKit { 53 54 class ImmutableArray; 55 class ImmutableDictionary; 56 class MutableArray; 57 class MutableDictionary; 58 class WebCertificateInfo; 59 class WebContextMenuItem; 60 class WebData; 61 class WebGraphicsContext; 62 class WebImage; 63 class WebSecurityOrigin; 64 class WebSerializedScriptValue; 65 class WebURLRequest; 66 class WebURLResponse; 67 class WebUserContentURLPattern; 68 69 template<typename APIType> struct APITypeInfo { }; 70 template<typename ImplType> struct ImplTypeInfo { }; 71 72 #define WK_ADD_API_MAPPING(TheAPIType, TheImplType) \ 73 template<> struct APITypeInfo<TheAPIType> { typedef TheImplType* ImplType; }; \ 74 template<> struct ImplTypeInfo<TheImplType*> { typedef TheAPIType APIType; }; 75 76 WK_ADD_API_MAPPING(WKArrayRef, ImmutableArray) 77 WK_ADD_API_MAPPING(WKBooleanRef, WebBoolean) 78 WK_ADD_API_MAPPING(WKCertificateInfoRef, WebCertificateInfo) 79 WK_ADD_API_MAPPING(WKContextMenuItemRef, WebContextMenuItem) 80 WK_ADD_API_MAPPING(WKDataRef, WebData) 81 WK_ADD_API_MAPPING(WKDictionaryRef, ImmutableDictionary) 82 WK_ADD_API_MAPPING(WKDoubleRef, WebDouble) 83 WK_ADD_API_MAPPING(WKErrorRef, WebError) 84 WK_ADD_API_MAPPING(WKGraphicsContextRef, WebGraphicsContext) 85 WK_ADD_API_MAPPING(WKImageRef, WebImage) 86 WK_ADD_API_MAPPING(WKMutableArrayRef, MutableArray) 87 WK_ADD_API_MAPPING(WKMutableDictionaryRef, MutableDictionary) 88 WK_ADD_API_MAPPING(WKSecurityOriginRef, WebSecurityOrigin) 89 WK_ADD_API_MAPPING(WKSerializedScriptValueRef, WebSerializedScriptValue) 90 WK_ADD_API_MAPPING(WKStringRef, WebString) 91 WK_ADD_API_MAPPING(WKTypeRef, APIObject) 92 WK_ADD_API_MAPPING(WKUInt64Ref, WebUInt64) 93 WK_ADD_API_MAPPING(WKURLRef, WebURL) 94 WK_ADD_API_MAPPING(WKURLRequestRef, WebURLRequest) 95 WK_ADD_API_MAPPING(WKURLResponseRef, WebURLResponse) 96 WK_ADD_API_MAPPING(WKUserContentURLPatternRef, WebUserContentURLPattern) 97 98 template<typename ImplType, typename APIType = typename ImplTypeInfo<ImplType*>::APIType> 99 class ProxyingRefPtr { 100 public: 101 ProxyingRefPtr(PassRefPtr<ImplType> impl) 102 : m_impl(impl) 103 { 104 } 105 106 operator APIType() { return toAPI(m_impl.get()); } 107 108 private: 109 RefPtr<ImplType> m_impl; 110 }; 111 112 /* Opaque typing convenience methods */ 113 114 template<typename T> 115 inline typename APITypeInfo<T>::ImplType toImpl(T t) 116 { 117 // An example of the conversions that take place: 118 // const struct OpaqueWKArray* -> const struct OpaqueWKArray -> struct OpaqueWKArray -> struct OpaqueWKArray* -> ImmutableArray* 119 120 typedef typename WTF::RemovePointer<T>::Type PotentiallyConstValueType; 121 typedef typename WTF::RemoveConst<PotentiallyConstValueType>::Type NonConstValueType; 122 123 return reinterpret_cast<typename APITypeInfo<T>::ImplType>(const_cast<NonConstValueType*>(t)); 124 } 125 126 template<typename T> 127 inline typename ImplTypeInfo<T>::APIType toAPI(T t) 128 { 129 return reinterpret_cast<typename ImplTypeInfo<T>::APIType>(t); 130 } 131 132 /* Special cases. */ 133 134 inline ProxyingRefPtr<WebString> toAPI(StringImpl* string) 135 { 136 return ProxyingRefPtr<WebString>(WebString::create(string)); 137 } 138 139 inline WKStringRef toCopiedAPI(const String& string) 140 { 141 RefPtr<WebString> webString = WebString::create(string); 142 return toAPI(webString.release().releaseRef()); 143 } 144 145 inline ProxyingRefPtr<WebURL> toURLRef(StringImpl* string) 146 { 147 if (!string) 148 ProxyingRefPtr<WebURL>(0); 149 return ProxyingRefPtr<WebURL>(WebURL::create(String(string))); 150 } 151 152 inline WKURLRef toCopiedURLAPI(const String& string) 153 { 154 if (!string) 155 return 0; 156 RefPtr<WebURL> webURL = WebURL::create(string); 157 return toAPI(webURL.release().releaseRef()); 158 } 159 160 inline String toWTFString(WKStringRef stringRef) 161 { 162 if (!stringRef) 163 return String(); 164 return toImpl(stringRef)->string(); 165 } 166 167 inline String toWTFString(WKURLRef urlRef) 168 { 169 if (!urlRef) 170 return String(); 171 return toImpl(urlRef)->string(); 172 } 173 174 inline ProxyingRefPtr<WebError> toAPI(const WebCore::ResourceError& error) 175 { 176 return ProxyingRefPtr<WebError>(WebError::create(error)); 177 } 178 179 inline ProxyingRefPtr<WebURLRequest> toAPI(const WebCore::ResourceRequest& request) 180 { 181 return ProxyingRefPtr<WebURLRequest>(WebURLRequest::create(request)); 182 } 183 184 inline ProxyingRefPtr<WebURLResponse> toAPI(const WebCore::ResourceResponse& response) 185 { 186 return ProxyingRefPtr<WebURLResponse>(WebURLResponse::create(response)); 187 } 188 189 /* Geometry conversions */ 190 191 inline WebCore::FloatRect toFloatRect(const WKRect& wkRect) 192 { 193 return WebCore::FloatRect(static_cast<float>(wkRect.origin.x), static_cast<float>(wkRect.origin.y), 194 static_cast<float>(wkRect.size.width), static_cast<float>(wkRect.size.height)); 195 } 196 197 inline WebCore::IntSize toIntSize(const WKSize& wkSize) 198 { 199 return WebCore::IntSize(static_cast<int>(wkSize.width), static_cast<int>(wkSize.height)); 200 } 201 202 inline WebCore::IntPoint toIntPoint(const WKPoint& wkPoint) 203 { 204 return WebCore::IntPoint(static_cast<int>(wkPoint.x), static_cast<int>(wkPoint.y)); 205 } 206 207 inline WebCore::IntRect toIntRect(const WKRect& wkRect) 208 { 209 return WebCore::IntRect(static_cast<int>(wkRect.origin.x), static_cast<int>(wkRect.origin.y), 210 static_cast<int>(wkRect.size.width), static_cast<int>(wkRect.size.height)); 211 } 212 213 inline WKRect toAPI(const WebCore::FloatRect& rect) 214 { 215 WKRect wkRect; 216 wkRect.origin.x = rect.x(); 217 wkRect.origin.y = rect.y(); 218 wkRect.size.width = rect.width(); 219 wkRect.size.height = rect.height(); 220 return wkRect; 221 } 222 223 inline WKRect toAPI(const WebCore::IntRect& rect) 224 { 225 WKRect wkRect; 226 wkRect.origin.x = rect.x(); 227 wkRect.origin.y = rect.y(); 228 wkRect.size.width = rect.width(); 229 wkRect.size.height = rect.height(); 230 return wkRect; 231 } 232 233 inline WKSize toAPI(const WebCore::IntSize& size) 234 { 235 WKSize wkSize; 236 wkSize.width = size.width(); 237 wkSize.height = size.height(); 238 return wkSize; 239 } 240 241 inline WKPoint toAPI(const WebCore::IntPoint& point) 242 { 243 WKPoint wkPoint; 244 wkPoint.x = point.x(); 245 wkPoint.y = point.y(); 246 return wkPoint; 247 } 248 249 /* Enum conversions */ 250 251 inline WKTypeID toAPI(APIObject::Type type) 252 { 253 return static_cast<WKTypeID>(type); 254 } 255 256 inline WKEventModifiers toAPI(WebEvent::Modifiers modifiers) 257 { 258 WKEventModifiers wkModifiers = 0; 259 if (modifiers & WebEvent::ShiftKey) 260 wkModifiers |= kWKEventModifiersShiftKey; 261 if (modifiers & WebEvent::ControlKey) 262 wkModifiers |= kWKEventModifiersControlKey; 263 if (modifiers & WebEvent::AltKey) 264 wkModifiers |= kWKEventModifiersAltKey; 265 if (modifiers & WebEvent::MetaKey) 266 wkModifiers |= kWKEventModifiersMetaKey; 267 return wkModifiers; 268 } 269 270 inline WKEventMouseButton toAPI(WebMouseEvent::Button mouseButton) 271 { 272 WKEventMouseButton wkMouseButton = kWKEventMouseButtonNoButton; 273 274 switch (mouseButton) { 275 case WebMouseEvent::NoButton: 276 wkMouseButton = kWKEventMouseButtonNoButton; 277 break; 278 case WebMouseEvent::LeftButton: 279 wkMouseButton = kWKEventMouseButtonLeftButton; 280 break; 281 case WebMouseEvent::MiddleButton: 282 wkMouseButton = kWKEventMouseButtonMiddleButton; 283 break; 284 case WebMouseEvent::RightButton: 285 wkMouseButton = kWKEventMouseButtonRightButton; 286 break; 287 } 288 289 return wkMouseButton; 290 } 291 292 inline WKContextMenuItemTag toAPI(WebCore::ContextMenuAction action) 293 { 294 switch (action) { 295 case WebCore::ContextMenuItemTagNoAction: 296 return kWKContextMenuItemTagNoAction; 297 case WebCore::ContextMenuItemTagOpenLinkInNewWindow: 298 return kWKContextMenuItemTagOpenLinkInNewWindow; 299 case WebCore::ContextMenuItemTagDownloadLinkToDisk: 300 return kWKContextMenuItemTagDownloadLinkToDisk; 301 case WebCore::ContextMenuItemTagCopyLinkToClipboard: 302 return kWKContextMenuItemTagCopyLinkToClipboard; 303 case WebCore::ContextMenuItemTagOpenImageInNewWindow: 304 return kWKContextMenuItemTagOpenImageInNewWindow; 305 case WebCore::ContextMenuItemTagDownloadImageToDisk: 306 return kWKContextMenuItemTagDownloadImageToDisk; 307 case WebCore::ContextMenuItemTagCopyImageToClipboard: 308 return kWKContextMenuItemTagCopyImageToClipboard; 309 case WebCore::ContextMenuItemTagOpenFrameInNewWindow: 310 return kWKContextMenuItemTagOpenFrameInNewWindow; 311 case WebCore::ContextMenuItemTagCopy: 312 return kWKContextMenuItemTagCopy; 313 case WebCore::ContextMenuItemTagGoBack: 314 return kWKContextMenuItemTagGoBack; 315 case WebCore::ContextMenuItemTagGoForward: 316 return kWKContextMenuItemTagGoForward; 317 case WebCore::ContextMenuItemTagStop: 318 return kWKContextMenuItemTagStop; 319 case WebCore::ContextMenuItemTagReload: 320 return kWKContextMenuItemTagReload; 321 case WebCore::ContextMenuItemTagCut: 322 return kWKContextMenuItemTagCut; 323 case WebCore::ContextMenuItemTagPaste: 324 return kWKContextMenuItemTagPaste; 325 case WebCore::ContextMenuItemTagSpellingGuess: 326 return kWKContextMenuItemTagSpellingGuess; 327 case WebCore::ContextMenuItemTagNoGuessesFound: 328 return kWKContextMenuItemTagNoGuessesFound; 329 case WebCore::ContextMenuItemTagIgnoreSpelling: 330 return kWKContextMenuItemTagIgnoreSpelling; 331 case WebCore::ContextMenuItemTagLearnSpelling: 332 return kWKContextMenuItemTagLearnSpelling; 333 case WebCore::ContextMenuItemTagOther: 334 return kWKContextMenuItemTagOther; 335 case WebCore::ContextMenuItemTagSearchInSpotlight: 336 return kWKContextMenuItemTagSearchInSpotlight; 337 case WebCore::ContextMenuItemTagSearchWeb: 338 return kWKContextMenuItemTagSearchWeb; 339 case WebCore::ContextMenuItemTagLookUpInDictionary: 340 return kWKContextMenuItemTagLookUpInDictionary; 341 case WebCore::ContextMenuItemTagOpenWithDefaultApplication: 342 return kWKContextMenuItemTagOpenWithDefaultApplication; 343 case WebCore::ContextMenuItemPDFActualSize: 344 return kWKContextMenuItemTagPDFActualSize; 345 case WebCore::ContextMenuItemPDFZoomIn: 346 return kWKContextMenuItemTagPDFZoomIn; 347 case WebCore::ContextMenuItemPDFZoomOut: 348 return kWKContextMenuItemTagPDFZoomOut; 349 case WebCore::ContextMenuItemPDFAutoSize: 350 return kWKContextMenuItemTagPDFAutoSize; 351 case WebCore::ContextMenuItemPDFSinglePage: 352 return kWKContextMenuItemTagPDFSinglePage; 353 case WebCore::ContextMenuItemPDFFacingPages: 354 return kWKContextMenuItemTagPDFFacingPages; 355 case WebCore::ContextMenuItemPDFContinuous: 356 return kWKContextMenuItemTagPDFContinuous; 357 case WebCore::ContextMenuItemPDFNextPage: 358 return kWKContextMenuItemTagPDFNextPage; 359 case WebCore::ContextMenuItemPDFPreviousPage: 360 return kWKContextMenuItemTagPDFPreviousPage; 361 case WebCore::ContextMenuItemTagOpenLink: 362 return kWKContextMenuItemTagOpenLink; 363 case WebCore::ContextMenuItemTagIgnoreGrammar: 364 return kWKContextMenuItemTagIgnoreGrammar; 365 case WebCore::ContextMenuItemTagSpellingMenu: 366 return kWKContextMenuItemTagSpellingMenu; 367 case WebCore::ContextMenuItemTagShowSpellingPanel: 368 return kWKContextMenuItemTagShowSpellingPanel; 369 case WebCore::ContextMenuItemTagCheckSpelling: 370 return kWKContextMenuItemTagCheckSpelling; 371 case WebCore::ContextMenuItemTagCheckSpellingWhileTyping: 372 return kWKContextMenuItemTagCheckSpellingWhileTyping; 373 case WebCore::ContextMenuItemTagCheckGrammarWithSpelling: 374 return kWKContextMenuItemTagCheckGrammarWithSpelling; 375 case WebCore::ContextMenuItemTagFontMenu: 376 return kWKContextMenuItemTagFontMenu; 377 case WebCore::ContextMenuItemTagShowFonts: 378 return kWKContextMenuItemTagShowFonts; 379 case WebCore::ContextMenuItemTagBold: 380 return kWKContextMenuItemTagBold; 381 case WebCore::ContextMenuItemTagItalic: 382 return kWKContextMenuItemTagItalic; 383 case WebCore::ContextMenuItemTagUnderline: 384 return kWKContextMenuItemTagUnderline; 385 case WebCore::ContextMenuItemTagOutline: 386 return kWKContextMenuItemTagOutline; 387 case WebCore::ContextMenuItemTagStyles: 388 return kWKContextMenuItemTagStyles; 389 case WebCore::ContextMenuItemTagShowColors: 390 return kWKContextMenuItemTagShowColors; 391 case WebCore::ContextMenuItemTagSpeechMenu: 392 return kWKContextMenuItemTagSpeechMenu; 393 case WebCore::ContextMenuItemTagStartSpeaking: 394 return kWKContextMenuItemTagStartSpeaking; 395 case WebCore::ContextMenuItemTagStopSpeaking: 396 return kWKContextMenuItemTagStopSpeaking; 397 case WebCore::ContextMenuItemTagWritingDirectionMenu: 398 return kWKContextMenuItemTagWritingDirectionMenu; 399 case WebCore::ContextMenuItemTagDefaultDirection: 400 return kWKContextMenuItemTagDefaultDirection; 401 case WebCore::ContextMenuItemTagLeftToRight: 402 return kWKContextMenuItemTagLeftToRight; 403 case WebCore::ContextMenuItemTagRightToLeft: 404 return kWKContextMenuItemTagRightToLeft; 405 case WebCore::ContextMenuItemTagPDFSinglePageScrolling: 406 return kWKContextMenuItemTagPDFSinglePageScrolling; 407 case WebCore::ContextMenuItemTagPDFFacingPagesScrolling: 408 return kWKContextMenuItemTagPDFFacingPagesScrolling; 409 #if ENABLE(INSPECTOR) 410 case WebCore::ContextMenuItemTagInspectElement: 411 return kWKContextMenuItemTagInspectElement; 412 #endif 413 case WebCore::ContextMenuItemTagTextDirectionMenu: 414 return kWKContextMenuItemTagTextDirectionMenu; 415 case WebCore::ContextMenuItemTagTextDirectionDefault: 416 return kWKContextMenuItemTagTextDirectionDefault; 417 case WebCore::ContextMenuItemTagTextDirectionLeftToRight: 418 return kWKContextMenuItemTagTextDirectionLeftToRight; 419 case WebCore::ContextMenuItemTagTextDirectionRightToLeft: 420 return kWKContextMenuItemTagTextDirectionRightToLeft; 421 case WebCore::ContextMenuItemTagOpenMediaInNewWindow: 422 return kWKContextMenuItemTagOpenMediaInNewWindow; 423 case WebCore::ContextMenuItemTagCopyMediaLinkToClipboard: 424 return kWKContextMenuItemTagCopyMediaLinkToClipboard; 425 case WebCore::ContextMenuItemTagToggleMediaControls: 426 return kWKContextMenuItemTagToggleMediaControls; 427 case WebCore::ContextMenuItemTagToggleMediaLoop: 428 return kWKContextMenuItemTagToggleMediaLoop; 429 case WebCore::ContextMenuItemTagEnterVideoFullscreen: 430 return kWKContextMenuItemTagEnterVideoFullscreen; 431 case WebCore::ContextMenuItemTagMediaPlayPause: 432 return kWKContextMenuItemTagMediaPlayPause; 433 case WebCore::ContextMenuItemTagMediaMute: 434 return kWKContextMenuItemTagMediaMute; 435 #if PLATFORM(MAC) 436 case WebCore::ContextMenuItemTagCorrectSpellingAutomatically: 437 return kWKContextMenuItemTagCorrectSpellingAutomatically; 438 case WebCore::ContextMenuItemTagSubstitutionsMenu: 439 return kWKContextMenuItemTagSubstitutionsMenu; 440 case WebCore::ContextMenuItemTagShowSubstitutions: 441 return kWKContextMenuItemTagShowSubstitutions; 442 case WebCore::ContextMenuItemTagSmartCopyPaste: 443 return kWKContextMenuItemTagSmartCopyPaste; 444 case WebCore::ContextMenuItemTagSmartQuotes: 445 return kWKContextMenuItemTagSmartQuotes; 446 case WebCore::ContextMenuItemTagSmartDashes: 447 return kWKContextMenuItemTagSmartDashes; 448 case WebCore::ContextMenuItemTagSmartLinks: 449 return kWKContextMenuItemTagSmartLinks; 450 case WebCore::ContextMenuItemTagTextReplacement: 451 return kWKContextMenuItemTagTextReplacement; 452 case WebCore::ContextMenuItemTagTransformationsMenu: 453 return kWKContextMenuItemTagTransformationsMenu; 454 case WebCore::ContextMenuItemTagMakeUpperCase: 455 return kWKContextMenuItemTagMakeUpperCase; 456 case WebCore::ContextMenuItemTagMakeLowerCase: 457 return kWKContextMenuItemTagMakeLowerCase; 458 case WebCore::ContextMenuItemTagCapitalize: 459 return kWKContextMenuItemTagCapitalize; 460 case WebCore::ContextMenuItemTagChangeBack: 461 return kWKContextMenuItemTagChangeBack; 462 #endif 463 default: 464 if (action < WebCore::ContextMenuItemBaseApplicationTag) 465 LOG_ERROR("ContextMenuAction %i is an unknown tag but is below the allowable custom tag value of %i", action, WebCore:: ContextMenuItemBaseApplicationTag); 466 return static_cast<WKContextMenuItemTag>(action); 467 } 468 } 469 470 inline WebCore::ContextMenuAction toImpl(WKContextMenuItemTag tag) 471 { 472 switch (tag) { 473 case kWKContextMenuItemTagNoAction: 474 return WebCore::ContextMenuItemTagNoAction; 475 case kWKContextMenuItemTagOpenLinkInNewWindow: 476 return WebCore::ContextMenuItemTagOpenLinkInNewWindow; 477 case kWKContextMenuItemTagDownloadLinkToDisk: 478 return WebCore::ContextMenuItemTagDownloadLinkToDisk; 479 case kWKContextMenuItemTagCopyLinkToClipboard: 480 return WebCore::ContextMenuItemTagCopyLinkToClipboard; 481 case kWKContextMenuItemTagOpenImageInNewWindow: 482 return WebCore::ContextMenuItemTagOpenImageInNewWindow; 483 case kWKContextMenuItemTagDownloadImageToDisk: 484 return WebCore::ContextMenuItemTagDownloadImageToDisk; 485 case kWKContextMenuItemTagCopyImageToClipboard: 486 return WebCore::ContextMenuItemTagCopyImageToClipboard; 487 case kWKContextMenuItemTagOpenFrameInNewWindow: 488 return WebCore::ContextMenuItemTagOpenFrameInNewWindow; 489 case kWKContextMenuItemTagCopy: 490 return WebCore::ContextMenuItemTagCopy; 491 case kWKContextMenuItemTagGoBack: 492 return WebCore::ContextMenuItemTagGoBack; 493 case kWKContextMenuItemTagGoForward: 494 return WebCore::ContextMenuItemTagGoForward; 495 case kWKContextMenuItemTagStop: 496 return WebCore::ContextMenuItemTagStop; 497 case kWKContextMenuItemTagReload: 498 return WebCore::ContextMenuItemTagReload; 499 case kWKContextMenuItemTagCut: 500 return WebCore::ContextMenuItemTagCut; 501 case kWKContextMenuItemTagPaste: 502 return WebCore::ContextMenuItemTagPaste; 503 case kWKContextMenuItemTagSpellingGuess: 504 return WebCore::ContextMenuItemTagSpellingGuess; 505 case kWKContextMenuItemTagNoGuessesFound: 506 return WebCore::ContextMenuItemTagNoGuessesFound; 507 case kWKContextMenuItemTagIgnoreSpelling: 508 return WebCore::ContextMenuItemTagIgnoreSpelling; 509 case kWKContextMenuItemTagLearnSpelling: 510 return WebCore::ContextMenuItemTagLearnSpelling; 511 case kWKContextMenuItemTagOther: 512 return WebCore::ContextMenuItemTagOther; 513 case kWKContextMenuItemTagSearchInSpotlight: 514 return WebCore::ContextMenuItemTagSearchInSpotlight; 515 case kWKContextMenuItemTagSearchWeb: 516 return WebCore::ContextMenuItemTagSearchWeb; 517 case kWKContextMenuItemTagLookUpInDictionary: 518 return WebCore::ContextMenuItemTagLookUpInDictionary; 519 case kWKContextMenuItemTagOpenWithDefaultApplication: 520 return WebCore::ContextMenuItemTagOpenWithDefaultApplication; 521 case kWKContextMenuItemTagPDFActualSize: 522 return WebCore::ContextMenuItemPDFActualSize; 523 case kWKContextMenuItemTagPDFZoomIn: 524 return WebCore::ContextMenuItemPDFZoomIn; 525 case kWKContextMenuItemTagPDFZoomOut: 526 return WebCore::ContextMenuItemPDFZoomOut; 527 case kWKContextMenuItemTagPDFAutoSize: 528 return WebCore::ContextMenuItemPDFAutoSize; 529 case kWKContextMenuItemTagPDFSinglePage: 530 return WebCore::ContextMenuItemPDFSinglePage; 531 case kWKContextMenuItemTagPDFFacingPages: 532 return WebCore::ContextMenuItemPDFFacingPages; 533 case kWKContextMenuItemTagPDFContinuous: 534 return WebCore::ContextMenuItemPDFContinuous; 535 case kWKContextMenuItemTagPDFNextPage: 536 return WebCore::ContextMenuItemPDFNextPage; 537 case kWKContextMenuItemTagPDFPreviousPage: 538 return WebCore::ContextMenuItemPDFPreviousPage; 539 case kWKContextMenuItemTagOpenLink: 540 return WebCore::ContextMenuItemTagOpenLink; 541 case kWKContextMenuItemTagIgnoreGrammar: 542 return WebCore::ContextMenuItemTagIgnoreGrammar; 543 case kWKContextMenuItemTagSpellingMenu: 544 return WebCore::ContextMenuItemTagSpellingMenu; 545 case kWKContextMenuItemTagShowSpellingPanel: 546 return WebCore::ContextMenuItemTagShowSpellingPanel; 547 case kWKContextMenuItemTagCheckSpelling: 548 return WebCore::ContextMenuItemTagCheckSpelling; 549 case kWKContextMenuItemTagCheckSpellingWhileTyping: 550 return WebCore::ContextMenuItemTagCheckSpellingWhileTyping; 551 case kWKContextMenuItemTagCheckGrammarWithSpelling: 552 return WebCore::ContextMenuItemTagCheckGrammarWithSpelling; 553 case kWKContextMenuItemTagFontMenu: 554 return WebCore::ContextMenuItemTagFontMenu; 555 case kWKContextMenuItemTagShowFonts: 556 return WebCore::ContextMenuItemTagShowFonts; 557 case kWKContextMenuItemTagBold: 558 return WebCore::ContextMenuItemTagBold; 559 case kWKContextMenuItemTagItalic: 560 return WebCore::ContextMenuItemTagItalic; 561 case kWKContextMenuItemTagUnderline: 562 return WebCore::ContextMenuItemTagUnderline; 563 case kWKContextMenuItemTagOutline: 564 return WebCore::ContextMenuItemTagOutline; 565 case kWKContextMenuItemTagStyles: 566 return WebCore::ContextMenuItemTagStyles; 567 case kWKContextMenuItemTagShowColors: 568 return WebCore::ContextMenuItemTagShowColors; 569 case kWKContextMenuItemTagSpeechMenu: 570 return WebCore::ContextMenuItemTagSpeechMenu; 571 case kWKContextMenuItemTagStartSpeaking: 572 return WebCore::ContextMenuItemTagStartSpeaking; 573 case kWKContextMenuItemTagStopSpeaking: 574 return WebCore::ContextMenuItemTagStopSpeaking; 575 case kWKContextMenuItemTagWritingDirectionMenu: 576 return WebCore::ContextMenuItemTagWritingDirectionMenu; 577 case kWKContextMenuItemTagDefaultDirection: 578 return WebCore::ContextMenuItemTagDefaultDirection; 579 case kWKContextMenuItemTagLeftToRight: 580 return WebCore::ContextMenuItemTagLeftToRight; 581 case kWKContextMenuItemTagRightToLeft: 582 return WebCore::ContextMenuItemTagRightToLeft; 583 case kWKContextMenuItemTagPDFSinglePageScrolling: 584 return WebCore::ContextMenuItemTagPDFSinglePageScrolling; 585 case kWKContextMenuItemTagPDFFacingPagesScrolling: 586 return WebCore::ContextMenuItemTagPDFFacingPagesScrolling; 587 #if ENABLE(INSPECTOR) 588 case kWKContextMenuItemTagInspectElement: 589 return WebCore::ContextMenuItemTagInspectElement; 590 #endif 591 case kWKContextMenuItemTagTextDirectionMenu: 592 return WebCore::ContextMenuItemTagTextDirectionMenu; 593 case kWKContextMenuItemTagTextDirectionDefault: 594 return WebCore::ContextMenuItemTagTextDirectionDefault; 595 case kWKContextMenuItemTagTextDirectionLeftToRight: 596 return WebCore::ContextMenuItemTagTextDirectionLeftToRight; 597 case kWKContextMenuItemTagTextDirectionRightToLeft: 598 return WebCore::ContextMenuItemTagTextDirectionRightToLeft; 599 case kWKContextMenuItemTagOpenMediaInNewWindow: 600 return WebCore::ContextMenuItemTagOpenMediaInNewWindow; 601 case kWKContextMenuItemTagCopyMediaLinkToClipboard: 602 return WebCore::ContextMenuItemTagCopyMediaLinkToClipboard; 603 case kWKContextMenuItemTagToggleMediaControls: 604 return WebCore::ContextMenuItemTagToggleMediaControls; 605 case kWKContextMenuItemTagToggleMediaLoop: 606 return WebCore::ContextMenuItemTagToggleMediaLoop; 607 case kWKContextMenuItemTagEnterVideoFullscreen: 608 return WebCore::ContextMenuItemTagEnterVideoFullscreen; 609 case kWKContextMenuItemTagMediaPlayPause: 610 return WebCore::ContextMenuItemTagMediaPlayPause; 611 case kWKContextMenuItemTagMediaMute: 612 return WebCore::ContextMenuItemTagMediaMute; 613 #if PLATFORM(MAC) 614 case kWKContextMenuItemTagCorrectSpellingAutomatically: 615 return WebCore::ContextMenuItemTagCorrectSpellingAutomatically; 616 case kWKContextMenuItemTagSubstitutionsMenu: 617 return WebCore::ContextMenuItemTagSubstitutionsMenu; 618 case kWKContextMenuItemTagShowSubstitutions: 619 return WebCore::ContextMenuItemTagShowSubstitutions; 620 case kWKContextMenuItemTagSmartCopyPaste: 621 return WebCore::ContextMenuItemTagSmartCopyPaste; 622 case kWKContextMenuItemTagSmartQuotes: 623 return WebCore::ContextMenuItemTagSmartQuotes; 624 case kWKContextMenuItemTagSmartDashes: 625 return WebCore::ContextMenuItemTagSmartDashes; 626 case kWKContextMenuItemTagSmartLinks: 627 return WebCore::ContextMenuItemTagSmartLinks; 628 case kWKContextMenuItemTagTextReplacement: 629 return WebCore::ContextMenuItemTagTextReplacement; 630 case kWKContextMenuItemTagTransformationsMenu: 631 return WebCore::ContextMenuItemTagTransformationsMenu; 632 case kWKContextMenuItemTagMakeUpperCase: 633 return WebCore::ContextMenuItemTagMakeUpperCase; 634 case kWKContextMenuItemTagMakeLowerCase: 635 return WebCore::ContextMenuItemTagMakeLowerCase; 636 case kWKContextMenuItemTagCapitalize: 637 return WebCore::ContextMenuItemTagCapitalize; 638 case kWKContextMenuItemTagChangeBack: 639 return WebCore::ContextMenuItemTagChangeBack; 640 #endif 641 default: 642 if (tag < kWKContextMenuItemBaseApplicationTag) 643 LOG_ERROR("WKContextMenuItemTag %i is an unknown tag but is below the allowable custom tag value of %i", tag, kWKContextMenuItemBaseApplicationTag); 644 return static_cast<WebCore::ContextMenuAction>(tag); 645 } 646 } 647 648 inline WKContextMenuItemType toAPI(WebCore::ContextMenuItemType type) 649 { 650 switch(type) { 651 case WebCore::ActionType: 652 return kWKContextMenuItemTypeAction; 653 case WebCore::CheckableActionType: 654 return kWKContextMenuItemTypeCheckableAction; 655 case WebCore::SeparatorType: 656 return kWKContextMenuItemTypeSeparator; 657 case WebCore::SubmenuType: 658 return kWKContextMenuItemTypeSubmenu; 659 default: 660 ASSERT_NOT_REACHED(); 661 return kWKContextMenuItemTypeAction; 662 } 663 } 664 665 inline FindOptions toFindOptions(WKFindOptions wkFindOptions) 666 { 667 unsigned findOptions = 0; 668 669 if (wkFindOptions & kWKFindOptionsCaseInsensitive) 670 findOptions |= FindOptionsCaseInsensitive; 671 if (wkFindOptions & kWKFindOptionsAtWordStarts) 672 findOptions |= FindOptionsAtWordStarts; 673 if (wkFindOptions & kWKFindOptionsTreatMedialCapitalAsWordStart) 674 findOptions |= FindOptionsTreatMedialCapitalAsWordStart; 675 if (wkFindOptions & kWKFindOptionsBackwards) 676 findOptions |= FindOptionsBackwards; 677 if (wkFindOptions & kWKFindOptionsWrapAround) 678 findOptions |= FindOptionsWrapAround; 679 if (wkFindOptions & kWKFindOptionsShowOverlay) 680 findOptions |= FindOptionsShowOverlay; 681 if (wkFindOptions & kWKFindOptionsShowFindIndicator) 682 findOptions |= FindOptionsShowFindIndicator; 683 684 return static_cast<FindOptions>(findOptions); 685 } 686 687 inline WKFrameNavigationType toAPI(WebCore::NavigationType type) 688 { 689 WKFrameNavigationType wkType = kWKFrameNavigationTypeOther; 690 691 switch (type) { 692 case WebCore::NavigationTypeLinkClicked: 693 wkType = kWKFrameNavigationTypeLinkClicked; 694 break; 695 case WebCore::NavigationTypeFormSubmitted: 696 wkType = kWKFrameNavigationTypeFormSubmitted; 697 break; 698 case WebCore::NavigationTypeBackForward: 699 wkType = kWKFrameNavigationTypeBackForward; 700 break; 701 case WebCore::NavigationTypeReload: 702 wkType = kWKFrameNavigationTypeReload; 703 break; 704 case WebCore::NavigationTypeFormResubmitted: 705 wkType = kWKFrameNavigationTypeFormResubmitted; 706 break; 707 case WebCore::NavigationTypeOther: 708 wkType = kWKFrameNavigationTypeOther; 709 break; 710 } 711 712 return wkType; 713 } 714 715 inline WKSameDocumentNavigationType toAPI(SameDocumentNavigationType type) 716 { 717 WKFrameNavigationType wkType = kWKSameDocumentNavigationAnchorNavigation; 718 719 switch (type) { 720 case SameDocumentNavigationAnchorNavigation: 721 wkType = kWKSameDocumentNavigationAnchorNavigation; 722 break; 723 case SameDocumentNavigationSessionStatePush: 724 wkType = kWKSameDocumentNavigationSessionStatePush; 725 break; 726 case SameDocumentNavigationSessionStateReplace: 727 wkType = kWKSameDocumentNavigationSessionStateReplace; 728 break; 729 case SameDocumentNavigationSessionStatePop: 730 wkType = kWKSameDocumentNavigationSessionStatePop; 731 break; 732 } 733 734 return wkType; 735 } 736 737 inline ImageOptions toImageOptions(WKImageOptions wkImageOptions) 738 { 739 unsigned imageOptions = 0; 740 741 if (wkImageOptions & kWKImageOptionsShareable) 742 imageOptions |= ImageOptionsShareable; 743 744 return static_cast<ImageOptions>(imageOptions); 745 } 746 747 } // namespace WebKit 748 749 #endif // WKSharedAPICast_h 750