void ViewClientEfl::didChangeTooltip(WKViewRef, WKStringRef tooltip, const void* clientInfo) { if (WKStringIsEmpty(tooltip)) toEwkView(clientInfo)->smartCallback<TooltipTextUnset>().call(); else toEwkView(clientInfo)->smartCallback<TooltipTextSet>().call(WKEinaSharedString(tooltip)); }
static ostream& operator<<(ostream& out, WKBundleFrameRef frame) { WKRetainPtr<WKStringRef> name(AdoptWK, WKBundleFrameCopyName(frame)); if (WKBundleFrameIsMainFrame(frame)) { if (!WKStringIsEmpty(name.get())) out << "main frame \"" << name << "\""; else out << "main frame"; } else { if (!WKStringIsEmpty(name.get())) out << "frame \"" << name << "\""; else out << "frame (anonymous)"; } return out; }
JSRetainPtr<JSStringRef> LayoutTestController::markerTextForListItem(JSValueRef element) { WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(InjectedBundle::shared().page()->page()); JSContextRef context = WKBundleFrameGetJavaScriptContext(mainFrame); if (!element || !JSValueIsObject(context, element)) return 0; WKRetainPtr<WKStringRef> text(AdoptWK, WKBundleFrameCopyMarkerText(mainFrame, const_cast<JSObjectRef>(element))); if (WKStringIsEmpty(text.get())) return 0; return toJS(text); }
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); }
TEST(WebKitNix, WebViewUpdateTextInputState) { memset(&stateReceived, 0, sizeof(stateReceived)); WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate()); WKRetainPtr<WKViewRef> view(AdoptWK, WKViewCreate(context.get(), 0)); NIXViewClient nixViewClient; memset(&nixViewClient, 0, sizeof(NIXViewClient)); nixViewClient.version = kNIXViewClientCurrentVersion; nixViewClient.updateTextInputState = updateTextInputState; NIXViewSetNixViewClient(view.get(), &nixViewClient); WKViewInitialize(view.get()); WKPageLoaderClient pageLoaderClient; memset(&pageLoaderClient, 0, sizeof(WKPageLoaderClient)); pageLoaderClient.version = kWKPageLoaderClientCurrentVersion; pageLoaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(WKViewGetPage(view.get()), &pageLoaderClient); const WKSize size = WKSizeMake(100, 100); WKViewSetSize(view.get(), size); NIXMouseEvent nixEvent; memset(&nixEvent, 0, sizeof(NIXMouseEvent)); nixEvent.type = kNIXInputEventTypeMouseDown; nixEvent.button = kWKEventMouseButtonLeftButton; nixEvent.x = 55; nixEvent.y = 55; nixEvent.globalX = 55; nixEvent.globalY = 55; nixEvent.clickCount = 1; nixEvent.modifiers = static_cast<NIXInputEventModifiers>(0);; nixEvent.timestamp = 0; // Simple test on content editable. WKRetainPtr<WKURLRef> editableContentUrl = adoptWK(Util::createURLForResource("../nix/single-tap-on-editable-content", "html")); WKPageLoadURL(WKViewGetPage(view.get()), editableContentUrl.get()); Util::run(&didFinishLoad); NIXViewSendMouseEvent(view.get(), &nixEvent); nixEvent.type = kNIXInputEventTypeMouseUp; NIXViewSendMouseEvent(view.get(), &nixEvent); Util::run(&didUpdateTextInputState); ASSERT_TRUE(didFinishLoad); ASSERT_TRUE(didUpdateTextInputState); ASSERT_TRUE(stateReceived.isContentEditable); ASSERT_TRUE(WKStringIsEqualToUTF8CString(stateReceived.surroundingText, "foobar")); WKRelease(stateReceived.surroundingText); ASSERT_TRUE(WKStringIsEmpty(stateReceived.submitLabel)); WKRelease(stateReceived.submitLabel); ASSERT_FALSE(stateReceived.inputMethodHints & NIXImhSensitiveData); ASSERT_TRUE(!WKRectIsEqual(stateReceived.cursorRect, invalidRectState)); ASSERT_TRUE(!WKRectIsEqual(stateReceived.editorRect, invalidRectState)); ASSERT_TRUE(!WKRectIsEqual(stateReceived.cursorRect, stateReceived.editorRect)); // Test on a form field. didFinishLoad = false; memset(&stateReceived, 0, sizeof(stateReceived)); editableContentUrl = adoptWK(Util::createURLForResource("../nix/single-tap-on-form-field", "html")); WKPageLoadURL(WKViewGetPage(view.get()), editableContentUrl.get()); Util::run(&didFinishLoad); nixEvent.type = kNIXInputEventTypeMouseDown; NIXViewSendMouseEvent(view.get(), &nixEvent); nixEvent.type = kNIXInputEventTypeMouseUp; NIXViewSendMouseEvent(view.get(), &nixEvent); didUpdateTextInputState = false; Util::run(&didUpdateTextInputState); WKRelease(stateReceived.surroundingText); ASSERT_TRUE(didFinishLoad); ASSERT_TRUE(didUpdateTextInputState); ASSERT_TRUE(WKStringIsEqualToUTF8CString(stateReceived.submitLabel, "submitLabelValue")); WKRelease(stateReceived.submitLabel); ASSERT_TRUE(stateReceived.inputMethodHints & NIXImhSensitiveData); }
static void didStartProvisionalLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void* clientInfo) { WKRetainPtr<WKStringRef> wkMIME = adoptWK(WKFrameCopyMIMEType(frame)); EXPECT_TRUE(WKStringIsEmpty(wkMIME.get())); }