Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java921
1 files changed, 0 insertions, 921 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java
deleted file mode 100644
index 0c2bc056d7..0000000000
--- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java
+++ /dev/null
@@ -1,921 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.browser;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.internal.C;
-import org.eclipse.swt.internal.ole.win32.*;
-import org.eclipse.swt.ole.win32.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.internal.win32.*;
-
-class WebSite extends OleControlSite {
- COMObject iDocHostUIHandler;
- COMObject iDocHostShowUI;
- COMObject iServiceProvider;
- COMObject iInternetSecurityManager;
- COMObject iOleCommandTarget;
- COMObject iAuthenticate;
- COMObject iDispatch;
- boolean ignoreNextMessage;
- Boolean canExecuteApplets;
-
- static final int OLECMDID_SHOWSCRIPTERROR = 40;
- static final short [] ACCENTS = new short [] {'~', '`', '\'', '^', '"'};
- static final String CONSUME_KEY = "org.eclipse.swt.OleFrame.ConsumeKey"; //$NON-NLS-1$
-
-public WebSite(Composite parent, int style, String progId) {
- super(parent, style, progId);
-}
-
-protected void createCOMInterfaces () {
- super.createCOMInterfaces();
- iDocHostUIHandler = new COMObject(new int[]{2, 0, 0, 4, 1, 5, 0, 0, 1, 1, 1, 3, 3, 2, 2, 1, 3, 2}){
- public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
- public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
- public int /*long*/ method2(int /*long*/[] args) {return Release();}
- public int /*long*/ method3(int /*long*/[] args) {return ShowContextMenu((int)/*64*/args[0], args[1], args[2], args[3]);}
- public int /*long*/ method4(int /*long*/[] args) {return GetHostInfo(args[0]);}
- public int /*long*/ method5(int /*long*/[] args) {return ShowUI((int)/*64*/args[0], args[1], args[2], args[3], args[4]);}
- public int /*long*/ method6(int /*long*/[] args) {return HideUI();}
- public int /*long*/ method7(int /*long*/[] args) {return UpdateUI();}
- public int /*long*/ method8(int /*long*/[] args) {return EnableModeless((int)/*64*/args[0]);}
- public int /*long*/ method9(int /*long*/[] args) {return OnDocWindowActivate((int)/*64*/args[0]);}
- public int /*long*/ method10(int /*long*/[] args) {return OnFrameWindowActivate((int)/*64*/args[0]);}
- public int /*long*/ method11(int /*long*/[] args) {return ResizeBorder(args[0], args[1], (int)/*64*/args[2]);}
- public int /*long*/ method12(int /*long*/[] args) {return TranslateAccelerator(args[0], args[1], (int)/*64*/args[2]);}
- public int /*long*/ method13(int /*long*/[] args) {return GetOptionKeyPath(args[0], (int)/*64*/args[1]);}
- public int /*long*/ method14(int /*long*/[] args) {return GetDropTarget(args[0], args[1]);}
- public int /*long*/ method15(int /*long*/[] args) {return GetExternal(args[0]);}
- public int /*long*/ method16(int /*long*/[] args) {return TranslateUrl((int)/*64*/args[0], args[1], args[2]);}
- public int /*long*/ method17(int /*long*/[] args) {return FilterDataObject(args[0], args[1]);}
- };
- iDocHostShowUI = new COMObject(new int[]{2, 0, 0, 7, C.PTR_SIZEOF == 4 ? 7 : 6}){
- public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
- public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
- public int /*long*/ method2(int /*long*/[] args) {return Release();}
- public int /*long*/ method3(int /*long*/[] args) {return ShowMessage(args[0], args[1], args[2], (int)/*64*/args[3], args[4], (int)/*64*/args[5], args[6]);}
- public int /*long*/ method4(int /*long*/[] args) {
- if (args.length == 7) {
- return ShowHelp(args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4], (int)/*64*/args[5], args[6]);
- } else {
- return ShowHelp_64(args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], args[4], args[5]);
- }
- }
- };
- iServiceProvider = new COMObject(new int[]{2, 0, 0, 3}){
- public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
- public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
- public int /*long*/ method2(int /*long*/[] args) {return Release();}
- public int /*long*/ method3(int /*long*/[] args) {return QueryService(args[0], args[1], args[2]);}
- };
- iInternetSecurityManager = new COMObject(new int[]{2, 0, 0, 1, 1, 3, 4, 8, 7, 3, 3}){
- public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
- public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
- public int /*long*/ method2(int /*long*/[] args) {return Release();}
- public int /*long*/ method3(int /*long*/[] args) {return SetSecuritySite(args[0]);}
- public int /*long*/ method4(int /*long*/[] args) {return GetSecuritySite(args[0]);}
- public int /*long*/ method5(int /*long*/[] args) {return MapUrlToZone(args[0], args[1], (int)/*64*/args[2]);}
- public int /*long*/ method6(int /*long*/[] args) {return GetSecurityId(args[0], args[1], args[2], args[3]);}
- public int /*long*/ method7(int /*long*/[] args) {return ProcessUrlAction(args[0], (int)/*64*/args[1], args[2], (int)/*64*/args[3], args[4], (int)/*64*/args[5], (int)/*64*/args[6], (int)/*64*/args[7]);}
- public int /*long*/ method8(int /*long*/[] args) {return QueryCustomPolicy(args[0], args[1], args[2], args[3], args[4], (int)/*64*/args[5], (int)/*64*/args[6]);}
- public int /*long*/ method9(int /*long*/[] args) {return SetZoneMapping((int)/*64*/args[0], args[1], (int)/*64*/args[2]);}
- public int /*long*/ method10(int /*long*/[] args) {return GetZoneMappings((int)/*64*/args[0], args[1], (int)/*64*/args[2]);}
- };
- iOleCommandTarget = new COMObject(new int[]{2, 0, 0, 4, 5}) {
- public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
- public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
- public int /*long*/ method2(int /*long*/[] args) {return Release();}
- public int /*long*/ method3(int /*long*/[] args) {return QueryStatus(args[0], (int)/*64*/args[1], args[2], args[3]);}
- public int /*long*/ method4(int /*long*/[] args) {return Exec(args[0], (int)/*64*/args[1], (int)/*64*/args[2], args[3], args[4]);}
- };
- iAuthenticate = new COMObject(new int[]{2, 0, 0, 3}){
- public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
- public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
- public int /*long*/ method2(int /*long*/[] args) {return Release();}
- public int /*long*/ method3(int /*long*/[] args) {return Authenticate(args[0], args[1], args[2]);}
- };
- iDispatch = new COMObject (new int[] {2, 0, 0, 1, 3, 5, 8}) {
- public int /*long*/ method0 (int /*long*/[] args) {
- /*
- * IDispatch check must be done here instead of in the shared QueryInterface
- * implementation, to avoid answering the superclass's IDispatch implementation
- * instead of this one.
- */
- GUID guid = new GUID ();
- COM.MoveMemory (guid, args[0], GUID.sizeof);
- if (COM.IsEqualGUID (guid, COM.IIDIDispatch)) {
- COM.MoveMemory (args[1], new int /*long*/[] {iDispatch.getAddress ()}, OS.PTR_SIZEOF);
- AddRef ();
- return COM.S_OK;
- }
- return QueryInterface (args[0], args[1]);
- }
- public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
- public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
- public int /*long*/ method3 (int /*long*/[] args) {return GetTypeInfoCount (args[0]);}
- public int /*long*/ method4 (int /*long*/[] args) {return GetTypeInfo ((int)/*64*/args[0], (int)/*64*/args[1], args[2]);}
- public int /*long*/ method5 (int /*long*/[] args) {return GetIDsOfNames ((int)/*64*/args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], args[4]);}
- public int /*long*/ method6 (int /*long*/[] args) {return Invoke ((int)/*64*/args[0], (int)/*64*/args[1], (int)/*64*/args[2], (int)/*64*/args[3], args[4], args[5], args[6], args[7]);}
- };
-}
-
-protected void disposeCOMInterfaces() {
- super.disposeCOMInterfaces();
- if (iDocHostUIHandler != null) {
- iDocHostUIHandler.dispose();
- iDocHostUIHandler = null;
- }
- if (iDocHostShowUI != null) {
- iDocHostShowUI.dispose();
- iDocHostShowUI = null;
- }
- if (iServiceProvider != null) {
- iServiceProvider.dispose();
- iServiceProvider = null;
- }
- if (iInternetSecurityManager != null) {
- iInternetSecurityManager.dispose();
- iInternetSecurityManager = null;
- }
- if (iOleCommandTarget != null) {
- iOleCommandTarget.dispose();
- iOleCommandTarget = null;
- }
- if (iAuthenticate != null) {
- iAuthenticate.dispose();
- iAuthenticate = null;
- }
- if (iDispatch != null) {
- iDispatch.dispose ();
- iDispatch = null;
- }
-}
-
-protected int AddRef() {
- /* Workaround for javac 1.1.8 bug */
- return super.AddRef();
-}
-
-protected int QueryInterface(int /*long*/ riid, int /*long*/ ppvObject) {
- int result = super.QueryInterface(riid, ppvObject);
- if (result == COM.S_OK) return result;
- if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
- GUID guid = new GUID();
- COM.MoveMemory(guid, riid, GUID.sizeof);
- if (COM.IsEqualGUID(guid, COM.IIDIDocHostUIHandler)) {
- COM.MoveMemory(ppvObject, new int /*long*/[] {iDocHostUIHandler.getAddress()}, OS.PTR_SIZEOF);
- AddRef();
- return COM.S_OK;
- }
- if (COM.IsEqualGUID(guid, COM.IIDIDocHostShowUI)) {
- COM.MoveMemory(ppvObject, new int /*long*/[] {iDocHostShowUI.getAddress()}, OS.PTR_SIZEOF);
- AddRef();
- return COM.S_OK;
- }
- if (COM.IsEqualGUID(guid, COM.IIDIServiceProvider)) {
- COM.MoveMemory(ppvObject, new int /*long*/[] {iServiceProvider.getAddress()}, OS.PTR_SIZEOF);
- AddRef();
- return COM.S_OK;
- }
- if (COM.IsEqualGUID(guid, COM.IIDIInternetSecurityManager)) {
- COM.MoveMemory(ppvObject, new int /*long*/[] {iInternetSecurityManager.getAddress()}, OS.PTR_SIZEOF);
- AddRef();
- return COM.S_OK;
- }
- if (COM.IsEqualGUID(guid, COM.IIDIOleCommandTarget)) {
- COM.MoveMemory(ppvObject, new int /*long*/[] {iOleCommandTarget.getAddress()}, OS.PTR_SIZEOF);
- AddRef();
- return COM.S_OK;
- }
- COM.MoveMemory(ppvObject, new int /*long*/[] {0}, OS.PTR_SIZEOF);
- return COM.E_NOINTERFACE;
-}
-
-/* IDocHostUIHandler */
-
-int EnableModeless(int EnableModeless) {
- return COM.E_NOTIMPL;
-}
-
-int FilterDataObject(int /*long*/ pDO, int /*long*/ ppDORet) {
- return COM.E_NOTIMPL;
-}
-
-int GetDropTarget(int /*long*/ pDropTarget, int /*long*/ ppDropTarget) {
- return COM.E_NOTIMPL;
-}
-
-int GetExternal(int /*long*/ ppDispatch) {
- OS.MoveMemory (ppDispatch, new int /*long*/[] {iDispatch.getAddress()}, C.PTR_SIZEOF);
- AddRef ();
- return COM.S_OK;
-}
-
-int GetHostInfo(int /*long*/ pInfo) {
- int info = IE.DOCHOSTUIFLAG_THEME;
- IE browser = (IE)((Browser)getParent().getParent()).webBrowser;
- if ((browser.style & SWT.BORDER) == 0) info |= IE.DOCHOSTUIFLAG_NO3DOUTERBORDER;
- OS.MoveMemory(pInfo + 4, new int[] {info}, 4);
-
- /*
- * TODO replace the implementation above with the one commented below
- * when 32-bit swt starts compiling with a newer mssdk whose definition
- * of DOCHOSTUIINFO includes the last two OLECHAR* fields.
- */
-// int info = IE.DOCHOSTUIFLAG_THEME;
-// Browser browser = (Browser)getParent().getParent();
-// if ((browser.getStyle() & SWT.BORDER) == 0) info |= IE.DOCHOSTUIFLAG_NO3DOUTERBORDER;
-//
-// DOCHOSTUIINFO uiInfo = new DOCHOSTUIINFO ();
-// OS.MoveMemory(uiInfo, pInfo, DOCHOSTUIINFO.sizeof);
-// uiInfo.dwFlags = info;
-// OS.MoveMemory(pInfo, uiInfo, DOCHOSTUIINFO.sizeof);
- return COM.S_OK;
-}
-
-int GetOptionKeyPath(int /*long*/ pchKey, int dw) {
- return COM.E_NOTIMPL;
-}
-
-int HideUI() {
- return COM.E_NOTIMPL;
-}
-
-int OnDocWindowActivate(int fActivate) {
- return COM.E_NOTIMPL;
-}
-
-int OnFrameWindowActivate(int fActivate) {
- return COM.E_NOTIMPL;
-}
-
-protected int Release() {
- /* Workaround for javac 1.1.8 bug */
- return super.Release();
-}
-
-int ResizeBorder(int /*long*/ prcBorder, int /*long*/ pUIWindow, int fFrameWindow) {
- return COM.E_NOTIMPL;
-}
-
-int ShowContextMenu(int dwID, int /*long*/ ppt, int /*long*/ pcmdtReserved, int /*long*/ pdispReserved) {
- Browser browser = (Browser)getParent().getParent();
- Event event = new Event();
- POINT pt = new POINT();
- OS.MoveMemory(pt, ppt, POINT.sizeof);
- event.x = pt.x;
- event.y = pt.y;
- browser.notifyListeners(SWT.MenuDetect, event);
- if (!event.doit) return COM.S_OK;
- Menu menu = browser.getMenu();
- if (menu != null && !menu.isDisposed ()) {
- if (pt.x != event.x || pt.y != event.y) {
- menu.setLocation (event.x, event.y);
- }
- menu.setVisible (true);
- return COM.S_OK;
- }
- /* Show default IE popup menu */
- return COM.S_FALSE;
-}
-
-int ShowUI(int dwID, int /*long*/ pActiveObject, int /*long*/ pCommandTarget, int /*long*/ pFrame, int /*long*/ pDoc) {
- return COM.S_FALSE;
-}
-
-int TranslateAccelerator(int /*long*/ lpMsg, int /*long*/ pguidCmdGroup, int nCmdID) {
- /*
- * Feature on Internet Explorer. By default the embedded Internet Explorer control runs
- * the Internet Explorer shortcuts (e.g. Ctrl+F for Find). This overrides the shortcuts
- * defined by SWT. The workaround is to forward the accelerator keys to the parent window
- * and have Internet Explorer ignore the ones handled by the parent window.
- */
- Menu menubar = getShell().getMenuBar();
- if (menubar != null && !menubar.isDisposed() && menubar.isEnabled()) {
- Shell shell = menubar.getShell();
- int /*long*/ hwnd = shell.handle;
- int /*long*/ hAccel = OS.SendMessage(hwnd, OS.WM_APP+1, 0, 0);
- if (hAccel != 0) {
- MSG msg = new MSG();
- OS.MoveMemory(msg, lpMsg, MSG.sizeof);
- if (OS.TranslateAccelerator(hwnd, hAccel, msg) != 0) return COM.S_OK;
- }
- }
- /*
- * By default the IE shortcuts are run. However, F5 causes a refresh, which is not
- * appropriate when rendering HTML from memory, and CTRL-N opens a standalone IE,
- * which is undesirable and can cause a crash in some contexts. The workaround is
- * to block IE from handling these shortcuts by answering COM.S_OK.
- */
- int result = COM.S_FALSE;
- MSG msg = new MSG();
- OS.MoveMemory(msg, lpMsg, MSG.sizeof);
- if (msg.message == OS.WM_KEYDOWN) {
- switch ((int)/*64*/msg.wParam) {
- case OS.VK_F5:
- OleAutomation auto = new OleAutomation(this);
- int[] rgdispid = auto.getIDsOfNames(new String[] { "LocationURL" }); //$NON-NLS-1$
- Variant pVarResult = auto.getProperty(rgdispid[0]);
- auto.dispose();
- if (pVarResult != null) {
- if (pVarResult.getType() == OLE.VT_BSTR) {
- String url = pVarResult.getString();
- if (url.equals(IE.ABOUT_BLANK)) result = COM.S_OK;
- }
- pVarResult.dispose();
- }
- break;
- case OS.VK_TAB:
- /*
- * Do not interfere with tab traversal since it's not known
- * if it will be within IE or out to another Control.
- */
- break;
- case OS.VK_RETURN:
- /*
- * Translating OS.VK_RETURN results in the native control handling it
- * twice (eg.- inserting two lines instead of one). So this key is not
- * translated here, and instead is explicitly handled in the keypress
- * handler.
- */
- break;
- case OS.VK_N:
- if (OS.GetKeyState (OS.VK_CONTROL) < 0 && OS.GetKeyState (OS.VK_MENU) >= 0 && OS.GetKeyState (OS.VK_SHIFT) >= 0) {
- frame.setData(CONSUME_KEY, "false"); //$NON-NLS-1$
- result = COM.S_OK;
- break;
- }
- // FALL THROUGH
- default:
- OS.TranslateMessage(msg);
- frame.setData(CONSUME_KEY, "true"); //$NON-NLS-1$
- break;
- }
- }
-
- switch (msg.message) {
- case OS.WM_KEYDOWN:
- case OS.WM_KEYUP: {
- if (!OS.IsWinCE) {
- boolean isAccent = false;
- switch ((int)/*64*/msg.wParam) {
- case OS.VK_SHIFT:
- case OS.VK_MENU:
- case OS.VK_CONTROL:
- case OS.VK_CAPITAL:
- case OS.VK_NUMLOCK:
- case OS.VK_SCROLL:
- break;
- default: {
- /*
- * Bug in Windows. The high bit in the result of MapVirtualKey() on
- * Windows NT is bit 32 while the high bit on Windows 95 is bit 16.
- * They should both be bit 32. The fix is to test the right bit.
- */
- int mapKey = OS.MapVirtualKey ((int)/*64*/msg.wParam, 2);
- if (mapKey != 0) {
- isAccent = (mapKey & (OS.IsWinNT ? 0x80000000 : 0x8000)) != 0;
- if (!isAccent) {
- for (int i=0; i<ACCENTS.length; i++) {
- int value = OS.VkKeyScan (ACCENTS [i]);
- if (value != -1 && (value & 0xFF) == msg.wParam) {
- int state = value >> 8;
- if ((OS.GetKeyState (OS.VK_SHIFT) < 0) == ((state & 0x1) != 0) &&
- (OS.GetKeyState (OS.VK_CONTROL) < 0) == ((state & 0x2) != 0) &&
- (OS.GetKeyState (OS.VK_MENU) < 0) == ((state & 0x4) != 0)) {
- if ((state & 0x7) != 0) isAccent = true;
- break;
- }
- }
- }
- }
- }
- break;
- }
- };
- if (isAccent) result = COM.S_OK;
- }
- }
- }
- return result;
-}
-
-int TranslateUrl(int dwTranslate, int /*long*/ pchURLIn, int /*long*/ ppchURLOut) {
- return COM.E_NOTIMPL;
-}
-
-int UpdateUI() {
- return COM.E_NOTIMPL;
-}
-
-/* IDocHostShowUI */
-
-int ShowMessage(int /*long*/ hwnd, int /*long*/ lpstrText, int /*long*/ lpstrCaption, int dwType, int /*long*/ lpstrHelpFile, int dwHelpContext, int /*long*/ plResult) {
- boolean ignore = ignoreNextMessage;
- ignoreNextMessage = false;
- return ignore ? COM.S_OK : COM.S_FALSE;
-}
-
-int ShowHelp_64(int /*long*/ hwnd, int /*long*/ pszHelpFile, int uCommand, int dwData, long pt, int /*long*/ pDispatchObjectHit) {
- POINT point = new POINT();
- OS.MoveMemory(point, new long[]{pt}, 8);
- return ShowHelp(hwnd, pszHelpFile, uCommand, dwData, point.x, point.y, pDispatchObjectHit);
-}
-
-/* Note. One of the arguments of ShowHelp is a POINT struct and not a pointer to a POINT struct. Because
- * of the way Callback gets int parameters from a va_list of C arguments 2 integer arguments must be declared,
- * ptMouse_x and ptMouse_y. Otherwise the Browser crashes when the user presses F1 to invoke
- * the help.
- */
-int ShowHelp(int /*long*/ hwnd, int /*long*/ pszHelpFile, int uCommand, int dwData, int ptMouse_x, int ptMouse_y, int /*long*/ pDispatchObjectHit) {
- Browser browser = (Browser)getParent().getParent();
- Event event = new Event();
- event.type = SWT.Help;
- event.display = getDisplay();
- event.widget = browser;
- Shell shell = browser.getShell();
- Control control = browser;
- do {
- if (control.isListening(SWT.Help)) {
- control.notifyListeners(SWT.Help, event);
- break;
- }
- if (control == shell) break;
- control = control.getParent();
- } while (true);
- return COM.S_OK;
-}
-
-/* IServiceProvider */
-
-int QueryService(int /*long*/ guidService, int /*long*/ riid, int /*long*/ ppvObject) {
- if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
- GUID guid = new GUID();
- COM.MoveMemory(guid, riid, GUID.sizeof);
- if (COM.IsEqualGUID(guid, COM.IIDIInternetSecurityManager)) {
- COM.MoveMemory(ppvObject, new int /*long*/[] {iInternetSecurityManager.getAddress()}, OS.PTR_SIZEOF);
- AddRef();
- return COM.S_OK;
- }
- if (COM.IsEqualGUID(guid, COM.IIDIAuthenticate)) {
- COM.MoveMemory(ppvObject, new int /*long*/[] {iAuthenticate.getAddress()}, OS.PTR_SIZEOF);
- AddRef();
- return COM.S_OK;
- }
- COM.MoveMemory(ppvObject, new int /*long*/[] {0}, OS.PTR_SIZEOF);
- return COM.E_NOINTERFACE;
-}
-
-/* IInternetSecurityManager */
-
-int SetSecuritySite(int /*long*/ pSite) {
- return IE.INET_E_DEFAULT_ACTION;
-}
-
-int GetSecuritySite(int /*long*/ ppSite) {
- return IE.INET_E_DEFAULT_ACTION;
-}
-
-int MapUrlToZone(int /*long*/ pwszUrl, int /*long*/ pdwZone, int dwFlags) {
- /*
- * Feature in IE 6 sp1. HTML rendered in memory
- * does not enable local links but the exact same
- * HTML document loaded through a local file is
- * permitted to follow local links. The workaround is
- * to return URLZONE_INTRANET instead of the default
- * value URLZONE_LOCAL_MACHINE.
- */
- COM.MoveMemory(pdwZone, new int[] {IE.URLZONE_INTRANET}, 4);
- return COM.S_OK;
-}
-
-int GetSecurityId(int /*long*/ pwszUrl, int /*long*/ pbSecurityId, int /*long*/ pcbSecurityId, int /*long*/ dwReserved) {
- return IE.INET_E_DEFAULT_ACTION;
-}
-
-int ProcessUrlAction(int /*long*/ pwszUrl, int dwAction, int /*long*/ pPolicy, int cbPolicy, int /*long*/ pContext, int cbContext, int dwFlags, int dwReserved) {
- ignoreNextMessage = false;
-
- /*
- * Feature in IE 6 sp1. HTML rendered in memory
- * containing an OBJECT tag referring to a local file
- * brings up a warning dialog asking the user whether
- * it should proceed or not. The workaround is to
- * set the policy to URLPOLICY_ALLOW in this case (dwAction
- * value of 0x1406).
- *
- * Feature in IE. Security Patches and user settings
- * affect the way the embedded web control behaves. The current
- * approach is to consider the content trusted and allow
- * all URLs by default.
- */
- int policy = IE.URLPOLICY_ALLOW;
-
- if (dwAction >= IE.URLACTION_JAVA_MIN && dwAction <= IE.URLACTION_JAVA_MAX) {
- if (canExecuteApplets ()) {
- policy = IE.URLPOLICY_JAVA_LOW;
- } else {
- policy = IE.URLPOLICY_JAVA_PROHIBIT;
- ignoreNextMessage = true;
- }
- }
- if (dwAction == IE.URLACTION_ACTIVEX_RUN) {
- GUID guid = new GUID();
- COM.MoveMemory(guid, pContext, GUID.sizeof);
- if (COM.IsEqualGUID(guid, COM.IIDJavaBeansBridge) && !canExecuteApplets ()) {
- policy = IE.URLPOLICY_DISALLOW;
- ignoreNextMessage = true;
- }
- if (COM.IsEqualGUID(guid, COM.IIDShockwaveActiveXControl)) {
- policy = IE.URLPOLICY_DISALLOW;
- ignoreNextMessage = true;
- }
- }
- if (dwAction == IE.URLACTION_SCRIPT_RUN) {
- IE browser = (IE)((Browser)getParent ().getParent ()).webBrowser;
- if (!browser.jsEnabled) {
- policy = IE.URLPOLICY_DISALLOW;
- }
- }
-
- if (cbPolicy >= 4) COM.MoveMemory(pPolicy, new int[] {policy}, 4);
- return policy == IE.URLPOLICY_ALLOW ? COM.S_OK : COM.S_FALSE;
-}
-
-boolean canExecuteApplets () {
- /*
- * Executing an applet in embedded IE will crash if IE's Java plug-in
- * launches its jre in IE's process, because this new jre conflicts
- * with the one running eclipse. These cases need to be avoided by
- * vetoing the running of applets.
- *
- * However as of Sun jre 1.6u10, applets can be launched in a separate
- * process, which avoids the conflict with the jre running eclipse.
- * Therefore if this condition is detected, and if the required jar
- * libraries are available, then applets can be executed.
- */
-
- /*
- * executing applets with IE6 embedded can crash, so do not
- * attempt this if the version is less than IE7
- */
- if (!IE.IsIE7) return false;
-
- if (canExecuteApplets == null) {
- WebBrowser webBrowser = ((Browser)getParent ().getParent ()).webBrowser;
- String script = "try {var element = document.createElement('object');element.classid='clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA';return element.object.isPlugin2();} catch (err) {};return false;"; //$NON-NLS-1$
- canExecuteApplets = ((Boolean)webBrowser.evaluate (script));
- if (canExecuteApplets.booleanValue ()) {
- try {
- Class.forName ("sun.plugin2.main.server.IExplorerPlugin"); /* plugin.jar */ //$NON-NLS-1$
- Class.forName ("com.sun.deploy.services.Service"); /* deploy.jar */ //$NON-NLS-1$
- Class.forName ("com.sun.javaws.Globals"); /* javaws.jar */ //$NON-NLS-1$
- } catch (ClassNotFoundException e) {
- /* one or more of the required jar libraries are not available */
- canExecuteApplets = Boolean.FALSE;
- }
- }
- }
- return canExecuteApplets.booleanValue ();
-}
-
-int QueryCustomPolicy(int /*long*/ pwszUrl, int /*long*/ guidKey, int /*long*/ ppPolicy, int /*long*/ pcbPolicy, int /*long*/ pContext, int cbContext, int dwReserved) {
- return IE.INET_E_DEFAULT_ACTION;
-}
-
-int SetZoneMapping(int dwZone, int /*long*/ lpszPattern, int dwFlags) {
- return IE.INET_E_DEFAULT_ACTION;
-}
-
-int GetZoneMappings(int dwZone, int /*long*/ ppenumString, int dwFlags) {
- return COM.E_NOTIMPL;
-}
-
-/* IOleCommandTarget */
-int QueryStatus(int /*long*/ pguidCmdGroup, int cCmds, int /*long*/ prgCmds, int /*long*/ pCmdText) {
- return COM.E_NOTSUPPORTED;
-}
-
-int Exec(int /*long*/ pguidCmdGroup, int nCmdID, int nCmdExecOpt, int /*long*/ pvaIn, int /*long*/ pvaOut) {
- if (pguidCmdGroup != 0) {
- GUID guid = new GUID();
- COM.MoveMemory(guid, pguidCmdGroup, GUID.sizeof);
-
- /*
- * If a javascript error occurred then suppress IE's default script error dialog.
- */
- if (COM.IsEqualGUID(guid, COM.CGID_DocHostCommandHandler)) {
- if (nCmdID == OLECMDID_SHOWSCRIPTERROR) return COM.S_OK;
- }
-
- /*
- * Bug in Internet Explorer. OnToolBar TRUE is also fired when any of the
- * address bar or menu bar are requested but not the tool bar. A workaround
- * has been posted by a Microsoft developer on the public webbrowser_ctl
- * newsgroup. The workaround is to implement the IOleCommandTarget interface
- * to test the argument of an undocumented command.
- */
- if (nCmdID == 1 && COM.IsEqualGUID(guid, COM.CGID_Explorer) && ((nCmdExecOpt & 0xFFFF) == 0xA)) {
- IE browser = (IE)((Browser)getParent().getParent()).webBrowser;
- browser.toolBar = (nCmdExecOpt & 0xFFFF0000) != 0;
- }
- }
- return COM.E_NOTSUPPORTED;
-}
-
-/* IAuthenticate */
-
-int Authenticate (int /*long*/ hwnd, int /*long*/ szUsername, int /*long*/ szPassword) {
- IE browser = (IE)((Browser)getParent ().getParent ()).webBrowser;
- for (int i = 0; i < browser.authenticationListeners.length; i++) {
- AuthenticationEvent event = new AuthenticationEvent (browser.browser);
- event.location = browser.lastNavigateURL;
- browser.authenticationListeners[i].authenticate (event);
- if (!event.doit) return COM.E_ACCESSDENIED;
- if (event.user != null && event.password != null) {
- TCHAR user = new TCHAR (0, event.user, true);
- int size = user.length () * TCHAR.sizeof;
- int /*long*/ userPtr = COM.CoTaskMemAlloc (size);
- OS.MoveMemory (userPtr, user, size);
- TCHAR password = new TCHAR (0, event.password, true);
- size = password.length () * TCHAR.sizeof;
- int /*long*/ passwordPtr = COM.CoTaskMemAlloc (size);
- OS.MoveMemory (passwordPtr, password, size);
- C.memmove (hwnd, new int /*long*/[] {0}, C.PTR_SIZEOF);
- C.memmove (szUsername, new int /*long*/[] {userPtr}, C.PTR_SIZEOF);
- C.memmove (szPassword, new int /*long*/[] {passwordPtr}, C.PTR_SIZEOF);
- return COM.S_OK;
- }
- }
-
- /* no listener handled the challenge, so defer to the native dialog */
- C.memmove (hwnd, new int /*long*/[] {getShell().handle}, C.PTR_SIZEOF);
- return COM.S_OK;
-}
-
-/* IDispatch */
-
-int GetTypeInfoCount (int /*long*/ pctinfo) {
- C.memmove (pctinfo, new int[] {0}, 4);
- return COM.S_OK;
-}
-
-int GetTypeInfo (int iTInfo, int lcid, int /*long*/ ppTInfo) {
- return COM.S_OK;
-}
-
-int GetIDsOfNames (int riid, int /*long*/ rgszNames, int cNames, int lcid, int /*long*/ rgDispId) {
- int /*long*/[] ptr = new int /*long*/[1];
- OS.MoveMemory (ptr, rgszNames, C.PTR_SIZEOF);
- int length = OS.wcslen (ptr[0]);
- char[] buffer = new char[length];
- OS.MoveMemory (buffer, ptr[0], length * 2);
- String functionName = String.valueOf (buffer);
- int result = COM.S_OK;
- int[] ids = new int[cNames]; /* DISPIDs */
- if (functionName.equals ("callJava")) { //$NON-NLS-1$
- for (int i = 0; i < cNames; i++) {
- ids[i] = i + 1;
- }
- } else {
- result = COM.DISP_E_UNKNOWNNAME;
- for (int i = 0; i < cNames; i++) {
- ids[i] = COM.DISPID_UNKNOWN;
- }
- }
- OS.MoveMemory (rgDispId, ids, cNames * 4);
- return result;
-}
-
-int Invoke (int dispIdMember, int /*long*/ riid, int lcid, int dwFlags, int /*long*/ pDispParams, int /*long*/ pVarResult, int /*long*/ pExcepInfo, int /*long*/ pArgErr) {
- DISPPARAMS dispParams = new DISPPARAMS ();
- COM.MoveMemory (dispParams, pDispParams, DISPPARAMS.sizeof);
- if (dispParams.cArgs != 2) {
- if (pVarResult != 0) {
- COM.MoveMemory (pVarResult, new int /*long*/[] {0}, C.PTR_SIZEOF);
- }
- return COM.S_OK;
- }
-
- int /*long*/ ptr = dispParams.rgvarg + Variant.sizeof;
- Variant variant = Variant.win32_new (ptr);
- int index = variant.getInt ();
- variant.dispose ();
- if (index <= 0) {
- if (pVarResult != 0) {
- COM.MoveMemory (pVarResult, new int /*long*/[] {0}, C.PTR_SIZEOF);
- }
- return COM.S_OK;
- }
-
- variant = Variant.win32_new (dispParams.rgvarg);
- IE ie = (IE)((Browser)getParent ().getParent ()).webBrowser;
- Object key = new Integer (index);
- BrowserFunction function = (BrowserFunction)ie.functions.get (key);
- Object returnValue = null;
- if (function != null) {
- try {
- Object temp = convertToJava (variant);
- if (temp instanceof Object[]) {
- Object[] args = (Object[])temp;
- try {
- returnValue = function.function (args);
- } catch (Exception e) {
- /* exception during function invocation */
- returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
- }
- }
- } catch (IllegalArgumentException e) {
- /* invalid argument value type */
- if (function.isEvaluate) {
- /* notify the function so that a java exception can be thrown */
- function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
- }
- returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
- }
- }
- variant.dispose ();
-
- if (pVarResult != 0) {
- if (returnValue == null) {
- COM.MoveMemory (pVarResult, new int /*long*/[] {0}, C.PTR_SIZEOF);
- } else {
- try {
- variant = convertToJS (returnValue);
- } catch (SWTException e) {
- /* invalid return value type */
- variant = convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
- }
- Variant.win32_copy (pVarResult, variant);
- variant.dispose ();
- }
- }
- return COM.S_OK;
-}
-
-Object convertToJava (Variant variant) {
- switch (variant.getType ()) {
- case OLE.VT_NULL: return null;
- case OLE.VT_BSTR: return variant.getString ();
- case OLE.VT_BOOL: return new Boolean (variant.getBoolean ());
- case OLE.VT_I2:
- case OLE.VT_I4:
- case OLE.VT_I8:
- case OLE.VT_R4:
- case OLE.VT_R8:
- return new Double (variant.getDouble ());
- case OLE.VT_DISPATCH: {
- Object[] args = null;
- OleAutomation auto = variant.getAutomation ();
- TYPEATTR typeattr = auto.getTypeInfoAttributes ();
- if (typeattr != null) {
- GUID guid = new GUID ();
- guid.Data1 = typeattr.guid_Data1;
- guid.Data2 = typeattr.guid_Data2;
- guid.Data3 = typeattr.guid_Data3;
- guid.Data4 = typeattr.guid_Data4;
- if (COM.IsEqualGUID (guid, COM.IIDIJScriptTypeInfo)) {
- int[] rgdispid = auto.getIDsOfNames (new String[] {"length"}); //$NON-NLS-1$
- if (rgdispid != null) {
- Variant varLength = auto.getProperty (rgdispid[0]);
- int length = varLength.getInt ();
- varLength.dispose ();
- args = new Object[length];
- for (int i = 0; i < length; i++) {
- rgdispid = auto.getIDsOfNames (new String[] {String.valueOf (i)});
- if (rgdispid != null) {
- Variant current = auto.getProperty (rgdispid[0]);
- try {
- args[i] = convertToJava (current);
- current.dispose ();
- } catch (IllegalArgumentException e) {
- /* invalid argument value type */
- current.dispose ();
- auto.dispose ();
- throw e;
- }
- }
- }
- }
- } else {
- auto.dispose ();
- SWT.error (SWT.ERROR_INVALID_ARGUMENT);
- }
- }
- auto.dispose ();
- return args;
- }
- }
- SWT.error (SWT.ERROR_INVALID_ARGUMENT);
- return null;
-}
-
-Variant convertToJS (Object value) {
- if (value == null) {
- return new Variant ();
- }
- if (value instanceof String) {
- return new Variant ((String)value);
- }
- if (value instanceof Boolean) {
- return new Variant (((Boolean)value).booleanValue ());
- }
- if (value instanceof Number) {
- return new Variant (((Number)value).doubleValue ());
- }
- if (value instanceof Object[]) {
- Object[] arrayValue = (Object[])value;
- int length = arrayValue.length;
- if (length > 0) {
- /* get IHTMLDocument2 */
- IE browser = (IE)((Browser)getParent ().getParent ()).webBrowser;
- OleAutomation auto = browser.auto;
- int[] rgdispid = auto.getIDsOfNames (new String[] {"Document"}); //$NON-NLS-1$
- if (rgdispid == null) return new Variant ();
- Variant pVarResult = auto.getProperty (rgdispid[0]);
- if (pVarResult == null) return new Variant ();
- if (pVarResult.getType () == COM.VT_EMPTY) {
- pVarResult.dispose ();
- return new Variant ();
- }
- OleAutomation document = pVarResult.getAutomation ();
- pVarResult.dispose ();
-
- /* get IHTMLWindow2 */
- rgdispid = document.getIDsOfNames (new String[] {"parentWindow"}); //$NON-NLS-1$
- if (rgdispid == null) {
- document.dispose ();
- return new Variant ();
- }
- pVarResult = document.getProperty (rgdispid[0]);
- if (pVarResult == null || pVarResult.getType () == COM.VT_EMPTY) {
- if (pVarResult != null) pVarResult.dispose ();
- document.dispose ();
- return new Variant ();
- }
- OleAutomation ihtmlWindow2 = pVarResult.getAutomation ();
- pVarResult.dispose ();
- document.dispose ();
-
- /* create a new JS array to be returned */
- rgdispid = ihtmlWindow2.getIDsOfNames (new String[] {"Array"}); //$NON-NLS-1$
- if (rgdispid == null) {
- ihtmlWindow2.dispose ();
- return new Variant ();
- }
- Variant arrayType = ihtmlWindow2.getProperty (rgdispid[0]);
- ihtmlWindow2.dispose ();
- IDispatch arrayTypeDispatch = arrayType.getDispatch ();
- arrayType.dispose ();
-
- int /*long*/[] result = new int /*long*/[1];
- int rc = arrayTypeDispatch.QueryInterface (COM.IIDIDispatchEx, result);
- if (rc != COM.S_OK) return new Variant ();
- IDispatchEx arrayTypeDispatchEx = new IDispatchEx (result[0]);
- result[0] = 0;
- int /*long*/ resultPtr = OS.GlobalAlloc (OS.GMEM_FIXED | OS.GMEM_ZEROINIT, VARIANT.sizeof);
- DISPPARAMS params = new DISPPARAMS ();
- rc = arrayTypeDispatchEx.InvokeEx (COM.DISPID_VALUE, COM.LOCALE_USER_DEFAULT, COM.DISPATCH_CONSTRUCT, params, resultPtr, null, 0);
- if (rc != COM.S_OK) {
- OS.GlobalFree (resultPtr);
- return new Variant ();
- }
- Variant array = Variant.win32_new (resultPtr);
- OS.GlobalFree (resultPtr);
-
- /* populate the array */
- auto = array.getAutomation ();
- int[] rgdispids = auto.getIDsOfNames (new String[] {"push"}); //$NON-NLS-1$
- if (rgdispids != null) {
- for (int i = 0; i < length; i++) {
- Object currentObject = arrayValue[i];
- try {
- Variant variant = convertToJS (currentObject);
- auto.invoke (rgdispids[0], new Variant[] {variant});
- variant.dispose ();
- } catch (SWTException e) {
- /* invalid return value type */
- auto.dispose ();
- array.dispose ();
- throw e;
- }
- }
- }
- auto.dispose ();
- return array;
- }
- }
- SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
- return null;
-}
-
-}

Back to the top