WebBrowser createWebBrowser (int style) { boolean webkitInstalled = WebKit.IsInstalled (); if ((style & SWT.MOZILLA) != 0 || (!webkitInstalled && (style & SWT.WEBKIT) == 0)) { return new Mozilla (); } if (!webkitInstalled) return null; return new WebKit (); }
static long /*int*/ browserProc(long /*int*/ id, long /*int*/ sel, long /*int*/ arg0, long /*int*/ arg1, long /*int*/ arg2, long /*int*/ arg3) { Display d = Display.getCurrent(); if (d == null || d.isDisposed()) return 0; Widget widget = d.findWidget(id); if (widget == null) return 0; WebKit webKit = (WebKit)((Browser)widget).webBrowser; if (sel == OS.sel_webView_resource_didFailLoadingWithError_fromDataSource_) { webKit.webView_resource_didFailLoadingWithError_fromDataSource(arg0, arg1, arg2, arg3); } else if (sel == OS.sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_) { webKit.webView_resource_didReceiveAuthenticationChallenge_fromDataSource(arg0, arg1, arg2, arg3); } else if (sel == OS.sel_callJava) { id result = webKit.callJava(arg0, arg1, arg2, arg3); return result == null ? 0 : result.id; } return 0; }
@Override public boolean close () { return close (true); }
boolean close (boolean showPrompters) { if (!jsEnabled) return true; String functionName = EXECUTE_ID + "CLOSE"; // $NON-NLS-1$ StringBuffer buffer = new StringBuffer ("function "); // $NON-NLS-1$ buffer.append (functionName); buffer.append ("(win) {\n"); // $NON-NLS-1$ buffer.append ("var fn = win.onbeforeunload; if (fn != null) {try {var str = fn(); "); // $NON-NLS-1$ if (showPrompters) { buffer.append ("if (str != null) { "); // $NON-NLS-1$ buffer.append ("var result = window.external.callRunBeforeUnloadConfirmPanelWithMessage(str);"); // $NON-NLS-1$ buffer.append ("if (!result) return false;}"); // $NON-NLS-1$ } buffer.append ("} catch (e) {}}"); // $NON-NLS-1$ buffer.append ("try {for (var i = 0; i < win.frames.length; i++) {var result = "); // $NON-NLS-1$ buffer.append (functionName); buffer.append ("(win.frames[i]); if (!result) return false;}} catch (e) {} return true;"); // $NON-NLS-1$ buffer.append ("\n};"); // $NON-NLS-1$ execute (buffer.toString ()); Boolean result = (Boolean)evaluate ("return " + functionName +"(window);"); // $NON-NLS-1$ // $NON-NLS-2$ if (result == null) return false; return result.booleanValue (); }
int type = WebKitGTK.JSValueGetType (ctx, result[0]); if (type == WebKitGTK.kJSTypeNumber) { int index = ((Double)convertToJava (ctx, result[0])).intValue (); result[0] = 0; Integer key = new Integer (index); type = WebKitGTK.JSValueGetType (ctx, result[0]); if (type == WebKitGTK.kJSTypeString) { String token = (String)convertToJava (ctx, result[0]); BrowserFunction function = functions.get (key); if (function != null && token.equals (function.token)) { try { C.memmove (result, arguments + 2 * C.PTR_SIZEOF, C.PTR_SIZEOF); Object temp = convertToJava (ctx, result[0]); if (temp instanceof Object[]) { Object[] args = (Object[])temp; return convertToJS (ctx, returnValue);
boolean handleKeyEvent (String type, int keyCode, int charCode, boolean altKey, boolean ctrlKey, boolean shiftKey, boolean metaKey) { if (type.equals (DOMEVENT_KEYDOWN)) { keyCode = translateKey (keyCode); lastKeyCode = keyCode; switch (keyCode) { if (!sendKeyEvent (keyEvent) || browser.isDisposed ()) return false; keyEvent.character = (char)lastCharCode; keyEvent.stateMask = (altKey ? SWT.ALT : 0) | (ctrlKey ? SWT.CTRL : 0) | (shiftKey ? SWT.SHIFT : 0) | (metaKey ? SWT.COMMAND : 0); return sendKeyEvent (keyEvent) && !browser.isDisposed (); keyCode = translateKey (keyCode); if (keyCode == 0) {
public boolean execute (String script) { WebFrame frame = webView.mainFrame(); long /*int*/ context = frame.globalContext(); byte[] bytes = null; try { bytes = (script + '\0').getBytes("UTF-8"); //$NON-NLS-1$ } catch (UnsupportedEncodingException e) { bytes = (script + '\0').getBytes(); } long /*int*/ scriptString = OS.JSStringCreateWithUTF8CString(bytes); try { bytes = (getUrl() + '\0').getBytes("UTF-8"); //$NON-NLS-1$ } catch (UnsupportedEncodingException e) { bytes = (getUrl() + '\0').getBytes(); } long /*int*/ urlString = OS.JSStringCreateWithUTF8CString(bytes); long /*int*/ result = OS.JSEvaluateScript(context, scriptString, 0, urlString, 0, null); OS.JSStringRelease(urlString); OS.JSStringRelease(scriptString); return result != 0; }
static int /*long*/ JSObjectCallAsFunctionProc (int /*long*/ ctx, int /*long*/ function, int /*long*/ thisObject, int /*long*/ argumentCount, int /*long*/ arguments, int /*long*/ exception) { if (WebKitGTK.JSValueIsObjectOfClass (ctx, thisObject, ExternalClass) == 0) { return WebKitGTK.JSValueMakeUndefined (ctx); } int /*long*/ ptr = WebKitGTK.JSObjectGetPrivate (thisObject); int /*long*/[] handle = new int /*long*/[1]; C.memmove (handle, ptr, C.PTR_SIZEOF); Browser browser = FindBrowser (handle[0]); if (browser == null) return 0; WebKit webkit = (WebKit)browser.webBrowser; return webkit.callJava (ctx, function, thisObject, argumentCount, arguments, exception); }
for (int i = 0; i < length; i++) { Object javaObject = arrayValue[i]; int /*long*/ jsObject = convertToJS (ctx, javaObject); arguments[i] = jsObject;
int /*long*/ current = WebKit_win32.JSObjectGetPropertyAtIndex (ctx, value, i, null); if (current != 0) { result[i] = convertToJava (ctx, current);
int /*long*/ webkit_window_object_cleared (int /*long*/ web_view, int /*long*/ frame, int /*long*/ context, int /*long*/ window_object) { int /*long*/ globalObject = WebKitGTK.JSContextGetGlobalObject (context); int /*long*/ externalObject = WebKitGTK.JSObjectMake (context, ExternalClass, webViewData); byte[] bytes = null; try { bytes = (OBJECTNAME_EXTERNAL + '\0').getBytes (CHARSET_UTF8); } catch (UnsupportedEncodingException e) { bytes = Converter.wcsToMbcs (null, OBJECTNAME_EXTERNAL, true); } int /*long*/ name = WebKitGTK.JSStringCreateWithUTF8CString (bytes); WebKitGTK.JSObjectSetProperty (context, globalObject, name, externalObject, 0, null); WebKitGTK.JSStringRelease (name); Iterator<BrowserFunction> elements = functions.values().iterator (); while (elements.hasNext ()) { BrowserFunction current = elements.next (); execute (current.functionString); } int /*long*/ mainFrame = WebKitGTK.webkit_web_view_get_main_frame (webView); boolean top = mainFrame == frame; addEventHandlers (web_view, top); return 0; }
while (elements.hasMoreElements ()) { BrowserFunction function = (BrowserFunction)elements.nextElement (); execute (function.functionString); hookDOMKeyListeners(frameID); hookDOMMouseListeners(frameID);
static int /*long*/ JSObjectCallAsFunctionProc (int /*long*/ ctx, int /*long*/ function, int /*long*/ thisObject, int /*long*/ argumentCount, int /*long*/ arguments, int /*long*/ exception) { WebKit_win32.JSGlobalContextRetain (ctx); if (WebKit_win32.JSValueIsObjectOfClass (ctx, thisObject, ExternalClass) == 0) { return WebKit_win32.JSValueMakeUndefined (ctx); } int /*long*/ ptr = WebKit_win32.JSObjectGetPrivate (thisObject); int /*long*/[] handle = new int /*long*/[1]; C.memmove (handle, ptr, C.PTR_SIZEOF); Browser browser = findBrowser (handle[0]); if (browser == null) return WebKit_win32.JSValueMakeUndefined (ctx); WebKit webkit = (WebKit)browser.webBrowser; return webkit.callJava (ctx, function, thisObject, argumentCount, arguments, exception); }
WebBrowser createWebBrowser (int style) { if ((style & SWT.MOZILLA) != 0) { return new Mozilla (); } return new WebKit (); }
return COM.S_OK; String url = WebKit.extractBSTR (result[0]); COM.SysFreeString (result[0]); IWebPolicyDecisionListener pdListener = new IWebPolicyDecisionListener (listener); return COM.S_OK; if (url.startsWith (WebKit.PROTOCOL_FILE) && webKit.getUrl ().startsWith (WebKit.ABOUT_BLANK) && webKit.untrustedText) {
execute (buffer.toString ()); buffer = new StringBuffer ("window.SWTmousehandler = function SWTmousehandler(e) {"); //$NON-NLS-1$ buffer.append ("try {e.returnValue = HandleWebKitEvent(e.type, e.screenX, e.screenY, e.detail, e.button, e.altKey, e.ctrlKey, e.shiftKey, e.metaKey, e.relatedTarget != null);} catch (e) {}};"); //$NON-NLS-1$ execute (buffer.toString ()); execute (buffer.toString ()); return; buffer.append ("frames[i].document.addEventListener('dragstart', window.SWTmousehandler, true);"); //$NON-NLS-1$ buffer.append ('}'); execute (buffer.toString ());
int type = WebKitGTK.JSValueGetType (ctx, result[0]); if (type == WebKitGTK.kJSTypeNumber) { int index = ((Double)convertToJava (ctx, result[0])).intValue (); result[0] = 0; Integer key = new Integer (index); type = WebKitGTK.JSValueGetType (ctx, result[0]); if (type == WebKitGTK.kJSTypeString) { String token = (String)convertToJava (ctx, result[0]); BrowserFunction function = functions.get (key); if (function != null && token.equals (function.token)) { try { C.memmove (result, arguments + 2 * C.PTR_SIZEOF, C.PTR_SIZEOF); Object temp = convertToJava (ctx, result[0]); if (temp instanceof Object[]) { Object[] args = (Object[])temp; return convertToJS (ctx, returnValue);
int keyCode = translateKey (((Double)arguments[1]).intValue ()); lastKeyCode = keyCode; switch (keyCode) { (((Boolean)arguments[6]).booleanValue () ? SWT.COMMAND : 0); if (!sendKeyEvent (keyEvent) || browser.isDisposed ()) return false; break; (((Boolean)arguments[5]).booleanValue () ? SWT.SHIFT : 0) | (((Boolean)arguments[6]).booleanValue () ? SWT.COMMAND : 0); return sendKeyEvent (keyEvent) && !browser.isDisposed (); int keyCode = translateKey (((Double)arguments[1]).intValue ()); if (keyCode == 0) {
buffer.append ("(win.frames[i]); if (!result) return false;}} catch (e) {} return true;"); // $NON-NLS-1$ buffer.append ("\n};"); // $NON-NLS-1$ execute (buffer.toString ()); Boolean result = (Boolean)evaluate ("return " + functionName +"(window);"); // $NON-NLS-1$ // $NON-NLS-2$ if (result == null) return false; return result.booleanValue ();