std::string toSTD(WKStringRef string) { size_t bufferSize = WKStringGetMaximumUTF8CStringSize(string); OwnArrayPtr<char> buffer = adoptArrayPtr(new char[bufferSize]); size_t stringLength = WKStringGetUTF8CString(string, buffer.get(), bufferSize); return std::string(buffer.get(), stringLength - 1); }
static const PassRefPtr<KeyEventInfo> keyPadName(WKStringRef keyRef) { if (WKStringIsEqualToUTF8CString(keyRef, "leftArrow")) return adoptRef(new KeyEventInfo("KP_Left", "")); if (WKStringIsEqualToUTF8CString(keyRef, "rightArrow")) return adoptRef(new KeyEventInfo("KP_Right", "")); if (WKStringIsEqualToUTF8CString(keyRef, "upArrow")) return adoptRef(new KeyEventInfo("KP_Up", "")); if (WKStringIsEqualToUTF8CString(keyRef, "downArrow")) return adoptRef(new KeyEventInfo("KP_Down", "")); if (WKStringIsEqualToUTF8CString(keyRef, "pageUp")) return adoptRef(new KeyEventInfo("KP_Prior", "")); if (WKStringIsEqualToUTF8CString(keyRef, "pageDown")) return adoptRef(new KeyEventInfo("KP_Next", "")); if (WKStringIsEqualToUTF8CString(keyRef, "home")) return adoptRef(new KeyEventInfo("KP_Home", "")); if (WKStringIsEqualToUTF8CString(keyRef, "end")) return adoptRef(new KeyEventInfo("KP_End", "")); if (WKStringIsEqualToUTF8CString(keyRef, "insert")) return adoptRef(new KeyEventInfo("KP_Insert", "")); if (WKStringIsEqualToUTF8CString(keyRef, "delete")) return adoptRef(new KeyEventInfo("KP_Delete", "")); size_t bufferSize = WKStringGetMaximumUTF8CStringSize(keyRef); OwnArrayPtr<char> buffer = adoptArrayPtr(new char[bufferSize]); WKStringGetUTF8CString(keyRef, buffer.get(), bufferSize); return adoptRef(new KeyEventInfo(buffer.get(), buffer.get())); }
std::string toSTDString(WKStringRef string) { size_t bufferSize = WKStringGetMaximumUTF8CStringSize(string); std::unique_ptr<char[]> buffer(new char[bufferSize]); size_t stringLength = WKStringGetUTF8CString(string, buffer.get(), bufferSize); return std::string(buffer.get(), stringLength - 1); }
static void willAddMessageToConsole(WKBundlePageRef, WKStringRef message, uint32_t lineNumber, const void*) { size_t messageStringSize = WKStringGetMaximumUTF8CStringSize(message); char* messageString = new char[messageStringSize]; WKStringGetUTF8CString(message, messageString, messageStringSize); printf("[console.log:%u] %s\n", lineNumber, messageString); delete[] messageString; }
void MiniBrowser::webProcessCrashed(NIXView, WKStringRef url, const void* clientInfo) { UNUSED_PARAM(clientInfo); size_t urlStringSize = WKStringGetMaximumUTF8CStringSize(url); char* urlString = new char[urlStringSize]; WKStringGetUTF8CString(url, urlString, urlStringSize); fprintf(stderr, "The web process has crashed on '%s'.\n", urlString); delete urlString; }
TEST(WebKit2, WKString) { WKStringRef string = WKStringCreateWithUTF8CString("hello"); EXPECT_TRUE(!WKStringIsEmpty(string)); EXPECT_TRUE(WKStringIsEqual(string, string)); EXPECT_TRUE(WKStringIsEqualToUTF8CString(string, "hello")); EXPECT_EQ(16u, WKStringGetMaximumUTF8CStringSize(string)); size_t maxSize = WKStringGetMaximumUTF8CStringSize(string); char* buffer = new char[maxSize]; size_t actualSize = WKStringGetUTF8CString(string, buffer, maxSize); EXPECT_EQ(6u, actualSize); EXPECT_STREQ("hello", buffer); delete[] buffer; maxSize = WKStringGetLength(string); EXPECT_EQ(5u, maxSize); // Allocate a buffer one character larger than we need. WKChar* uniBuffer = new WKChar[maxSize+1]; actualSize = WKStringGetCharacters(string, uniBuffer, maxSize); EXPECT_EQ(5u, actualSize); WKChar helloBuffer[] = { 'h', 'e', 'l', 'l', 'o' }; EXPECT_TRUE(!memcmp(uniBuffer, helloBuffer, 10)); // Test passing a buffer length < the string length. actualSize = WKStringGetCharacters(string, uniBuffer, maxSize - 1); EXPECT_EQ(4u, actualSize); // Test passing a buffer length > the string length. actualSize = WKStringGetCharacters(string, uniBuffer, maxSize + 1); EXPECT_EQ(5u, actualSize); delete[] uniBuffer; WKRelease(string); }
int getGDKKeySymForKeyRef(WKStringRef keyRef, unsigned location, guint* modifiers) { if (location == DOMKeyLocationNumpad) { if (WKStringIsEqualToUTF8CString(keyRef, "leftArrow")) return GDK_KEY_KP_Left; if (WKStringIsEqualToUTF8CString(keyRef, "rightArror")) return GDK_KEY_KP_Right; if (WKStringIsEqualToUTF8CString(keyRef, "upArrow")) return GDK_KEY_KP_Up; if (WKStringIsEqualToUTF8CString(keyRef, "downArrow")) return GDK_KEY_KP_Down; if (WKStringIsEqualToUTF8CString(keyRef, "pageUp")) return GDK_KEY_KP_Page_Up; if (WKStringIsEqualToUTF8CString(keyRef, "pageDown")) return GDK_KEY_KP_Page_Down; if (WKStringIsEqualToUTF8CString(keyRef, "home")) return GDK_KEY_KP_Home; if (WKStringIsEqualToUTF8CString(keyRef, "end")) return GDK_KEY_KP_End; if (WKStringIsEqualToUTF8CString(keyRef, "insert")) return GDK_KEY_KP_Insert; if (WKStringIsEqualToUTF8CString(keyRef, "delete")) return GDK_KEY_KP_Delete; return GDK_KEY_VoidSymbol; } if (WKStringIsEqualToUTF8CString(keyRef, "leftArrow")) return GDK_KEY_Left; if (WKStringIsEqualToUTF8CString(keyRef, "rightArrow")) return GDK_KEY_Right; if (WKStringIsEqualToUTF8CString(keyRef, "upArrow")) return GDK_KEY_Up; if (WKStringIsEqualToUTF8CString(keyRef, "downArrow")) return GDK_KEY_Down; if (WKStringIsEqualToUTF8CString(keyRef, "pageUp")) return GDK_KEY_Page_Up; if (WKStringIsEqualToUTF8CString(keyRef, "pageDown")) return GDK_KEY_Page_Down; if (WKStringIsEqualToUTF8CString(keyRef, "home")) return GDK_KEY_Home; if (WKStringIsEqualToUTF8CString(keyRef, "end")) return GDK_KEY_End; if (WKStringIsEqualToUTF8CString(keyRef, "insert")) return GDK_KEY_Insert; if (WKStringIsEqualToUTF8CString(keyRef, "delete")) return GDK_KEY_Delete; if (WKStringIsEqualToUTF8CString(keyRef, "printScreen")) return GDK_KEY_Print; if (WKStringIsEqualToUTF8CString(keyRef, "menu")) return GDK_KEY_Menu; if (WKStringIsEqualToUTF8CString(keyRef, "F1")) return GDK_KEY_F1; if (WKStringIsEqualToUTF8CString(keyRef, "F2")) return GDK_KEY_F2; if (WKStringIsEqualToUTF8CString(keyRef, "F3")) return GDK_KEY_F3; if (WKStringIsEqualToUTF8CString(keyRef, "F4")) return GDK_KEY_F4; if (WKStringIsEqualToUTF8CString(keyRef, "F5")) return GDK_KEY_F5; if (WKStringIsEqualToUTF8CString(keyRef, "F6")) return GDK_KEY_F6; if (WKStringIsEqualToUTF8CString(keyRef, "F7")) return GDK_KEY_F7; if (WKStringIsEqualToUTF8CString(keyRef, "F8")) return GDK_KEY_F8; if (WKStringIsEqualToUTF8CString(keyRef, "F9")) return GDK_KEY_F9; if (WKStringIsEqualToUTF8CString(keyRef, "F10")) return GDK_KEY_F10; if (WKStringIsEqualToUTF8CString(keyRef, "F11")) return GDK_KEY_F11; if (WKStringIsEqualToUTF8CString(keyRef, "F12")) return GDK_KEY_F12; size_t bufferSize = WKStringGetMaximumUTF8CStringSize(keyRef); OwnArrayPtr<char> buffer = adoptArrayPtr(new char[bufferSize]); WKStringGetUTF8CString(keyRef, buffer.get(), bufferSize); char charCode = buffer.get()[0]; if (charCode == '\n' || charCode == '\r') return GDK_KEY_Return; if (charCode == '\t') return GDK_KEY_Tab; if (charCode == '\x8') return GDK_KEY_BackSpace; if (WTF::isASCIIUpper(charCode)) *modifiers |= GDK_SHIFT_MASK; return gdk_unicode_to_keyval(static_cast<guint32>(buffer.get()[0])); }
static const PassRefPtr<KeyEventInfo> keyName(WKStringRef keyRef) { if (WKStringIsEqualToUTF8CString(keyRef, "leftArrow")) return adoptRef(new KeyEventInfo("Left", "")); if (WKStringIsEqualToUTF8CString(keyRef, "rightArrow")) return adoptRef(new KeyEventInfo("Right", "")); if (WKStringIsEqualToUTF8CString(keyRef, "upArrow")) return adoptRef(new KeyEventInfo("Up", "")); if (WKStringIsEqualToUTF8CString(keyRef, "downArrow")) return adoptRef(new KeyEventInfo("Down", "")); if (WKStringIsEqualToUTF8CString(keyRef, "pageUp")) return adoptRef(new KeyEventInfo("Prior", "")); if (WKStringIsEqualToUTF8CString(keyRef, "pageDown")) return adoptRef(new KeyEventInfo("Next", "")); if (WKStringIsEqualToUTF8CString(keyRef, "home")) return adoptRef(new KeyEventInfo("Home", "")); if (WKStringIsEqualToUTF8CString(keyRef, "end")) return adoptRef(new KeyEventInfo("End", "")); if (WKStringIsEqualToUTF8CString(keyRef, "insert")) return adoptRef(new KeyEventInfo("Insert", "")); if (WKStringIsEqualToUTF8CString(keyRef, "delete")) return adoptRef(new KeyEventInfo("Delete", "")); if (WKStringIsEqualToUTF8CString(keyRef, "printScreen")) return adoptRef(new KeyEventInfo("Print", "")); if (WKStringIsEqualToUTF8CString(keyRef, "menu")) return adoptRef(new KeyEventInfo("Menu", "")); if (WKStringIsEqualToUTF8CString(keyRef, "leftControl")) return adoptRef(new KeyEventInfo("Control_L", "")); if (WKStringIsEqualToUTF8CString(keyRef, "rightControl")) return adoptRef(new KeyEventInfo("Control_R", "")); if (WKStringIsEqualToUTF8CString(keyRef, "leftShift")) return adoptRef(new KeyEventInfo("Shift_L", "")); if (WKStringIsEqualToUTF8CString(keyRef, "rightShift")) return adoptRef(new KeyEventInfo("Shift_R", "")); if (WKStringIsEqualToUTF8CString(keyRef, "leftAlt")) return adoptRef(new KeyEventInfo("Alt_L", "")); if (WKStringIsEqualToUTF8CString(keyRef, "rightAlt")) return adoptRef(new KeyEventInfo("Alt_R", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F1")) return adoptRef(new KeyEventInfo("F1", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F2")) return adoptRef(new KeyEventInfo("F2", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F3")) return adoptRef(new KeyEventInfo("F3", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F4")) return adoptRef(new KeyEventInfo("F4", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F5")) return adoptRef(new KeyEventInfo("F5", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F6")) return adoptRef(new KeyEventInfo("F6", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F7")) return adoptRef(new KeyEventInfo("F7", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F8")) return adoptRef(new KeyEventInfo("F8", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F9")) return adoptRef(new KeyEventInfo("F9", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F10")) return adoptRef(new KeyEventInfo("F10", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F11")) return adoptRef(new KeyEventInfo("F11", "")); if (WKStringIsEqualToUTF8CString(keyRef, "F12")) return adoptRef(new KeyEventInfo("F12", "")); size_t bufferSize = WKStringGetMaximumUTF8CStringSize(keyRef); OwnArrayPtr<char> buffer = adoptArrayPtr(new char[bufferSize]); WKStringGetUTF8CString(keyRef, buffer.get(), bufferSize); char charCode = buffer.get()[0]; if (charCode == '\n' || charCode == '\r') return adoptRef(new KeyEventInfo("Return", "\r")); if (charCode == '\t') return adoptRef(new KeyEventInfo("Tab", "\t")); if (charCode == '\x8') return adoptRef(new KeyEventInfo("BackSpace", "\x8")); if (charCode == ' ') return adoptRef(new KeyEventInfo("space", " ")); return adoptRef(new KeyEventInfo(buffer.get(), buffer.get())); }
TEST(WebKitNix, SuspendResumeAPI) { // This test uses a page that changes its title - showing current time. // As the suspend method is called the page's changes are paused. The // animation continues as we call the resume method. During this process // there are checkpoints to ensure that changes are pausing/resuming. const WKSize size = WKSizeMake(150, 100); ToolsNix::GLOffscreenBuffer offscreenBuffer(size.width, size.height); ASSERT_TRUE(offscreenBuffer.makeCurrent()); WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate()); WKRetainPtr<WKViewRef> view(AdoptWK, WKViewCreate(context.get(), 0)); Util::ForceRepaintClient forceRepaintClient(view.get()); forceRepaintClient.setClearColor(0, 0, 1, 1); WKViewInitialize(view.get()); WKViewSetSize(view.get(), size); glViewport(0, 0, size.width, size.height); forceRepaintClient.clear(); Util::PageLoader loader(view.get()); loader.waitForLoadURLAndRepaint("../nix/SuspendResume"); size_t bufferSize = WKStringGetMaximumUTF8CStringSize(WKPageCopyTitle(WKViewGetPage(view.get()))); char firstSampleBeforeSuspend[bufferSize]; char secondSampleBeforeSuspend[bufferSize]; char firstSampleAfterSuspend[bufferSize]; char secondSampleAfterSuspend[bufferSize]; char firstSampleAfterResume[bufferSize]; WKStringGetUTF8CString(WKPageCopyTitle(WKViewGetPage(view.get())), firstSampleBeforeSuspend, bufferSize); // After collecting the first sample a repaint is needed to get viewport updated accordingly. // This proccess is repeated for each collected sample. Util::sleep(0.1); loader.forceRepaint(); WKStringGetUTF8CString(WKPageCopyTitle(WKViewGetPage(view.get())), secondSampleBeforeSuspend, bufferSize); // The timer is ticking - two different samples. EXPECT_STRNE(firstSampleBeforeSuspend, secondSampleBeforeSuspend); // Force an update before suspending otherwise we can get same sample value after suspending // and the test becomes flacky. Util::sleep(0.1); loader.forceRepaint(); WKViewSuspendActiveDOMObjectsAndAnimations(view.get()); Util::sleep(0.1); loader.forceRepaint(); WKStringGetUTF8CString(WKPageCopyTitle(WKViewGetPage(view.get())), firstSampleAfterSuspend, bufferSize); // The timer is paused - still two different samples. EXPECT_STRNE(secondSampleBeforeSuspend, firstSampleAfterSuspend); Util::sleep(0.1); loader.forceRepaint(); WKStringGetUTF8CString(WKPageCopyTitle(WKViewGetPage(view.get())), secondSampleAfterSuspend, bufferSize); // The timer is paused - two samples collected while paused so they are equal. EXPECT_STREQ(firstSampleAfterSuspend, secondSampleAfterSuspend); WKViewResumeActiveDOMObjectsAndAnimations(view.get()); Util::sleep(0.1); loader.forceRepaint(); WKStringGetUTF8CString(WKPageCopyTitle(WKViewGetPage(view.get())), firstSampleAfterResume, bufferSize); // The timer is ticking again - two different samples. EXPECT_STRNE(secondSampleAfterSuspend, firstSampleAfterResume); }