diff options
author | Grant Gayed <ggayed> | 2011-01-18 21:10:14 +0000 |
---|---|---|
committer | Grant Gayed <ggayed> | 2011-01-18 21:10:14 +0000 |
commit | f8ef3cf7f50531eb98cb5b6c6b6b74b2ed865cbd (patch) | |
tree | 135ee6e07a94b46687dccb44d3e4b46b604f5883 | |
parent | 6de5d128065bf1d280a4f3338b044f38646dc566 (diff) | |
download | eclipse.platform.swt-f8ef3cf7f50531eb98cb5b6c6b6b74b2ed865cbd.tar.gz eclipse.platform.swt-f8ef3cf7f50531eb98cb5b6c6b6b74b2ed865cbd.tar.xz eclipse.platform.swt-f8ef3cf7f50531eb98cb5b6c6b6b74b2ed865cbd.zip |
344161 (new fix) - Eclipse crashes if link to PDF with anchor is clicked twice from Browser Widget
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java index d84e4465bf..2f7c1dca5d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.swt.browser; +import java.net.*; import java.util.*; import org.eclipse.swt.*; @@ -610,13 +611,22 @@ public void create(Composite parent, int style) { * workaround is to not unload the Acrobat libraries if > MAX_PDF PDF * files have been opened. */ - int extensionIndex = url.lastIndexOf('.'); - if (extensionIndex != -1) { - String extension = url.substring(extensionIndex); - if (extension.equalsIgnoreCase(EXTENSION_PDF)) { - PDFCount++; - if (PDFCount > MAX_PDF) { - COM.FreeUnusedLibraries = false; + boolean isPDF = false; + String path = null; + try { + path = new URL(url).getPath(); + } catch (MalformedURLException e) { + } + if (path != null) { + int extensionIndex = path.lastIndexOf('.'); + if (extensionIndex != -1) { + String extension = path.substring(extensionIndex); + if (extension.equalsIgnoreCase(EXTENSION_PDF)) { + isPDF = true; + PDFCount++; + if (PDFCount > MAX_PDF) { + COM.FreeUnusedLibraries = false; + } } } } @@ -661,7 +671,9 @@ public void create(Composite parent, int style) { execute (function.functionString); } } - hookDOMListeners(webBrowser, isTop); + if (!isPDF) { + hookDOMListeners(webBrowser, isTop); + } webBrowser.dispose(); break; } @@ -1828,28 +1840,9 @@ void handleDOMEvent (OleEvent e) { } void hookDOMListeners(OleAutomation webBrowser, final boolean isTop) { - /* - * DOM listeners are only applicable when HTML content is shown. - * HTML documents always answer the Type property, so failure to get - * this value indicates that some other content type is being shown. - */ - int[] rgdispid = webBrowser.getIDsOfNames(new String[] { PROPERTY_TYPE }); - if (rgdispid == null) { - return; - } + int[] rgdispid = webBrowser.getIDsOfNames(new String[] { PROPERTY_DOCUMENT }); int dispIdMember = rgdispid[0]; - Variant pVarResult = webBrowser.getProperty(dispIdMember); - if (pVarResult == null || pVarResult.getType() != COM.VT_BSTR) { - if (pVarResult != null) pVarResult.dispose (); - return; - } - String type = pVarResult.getString(); - pVarResult.dispose(); - if (!type.equals(HTML_DOCUMENT)) return; - - rgdispid = webBrowser.getIDsOfNames(new String[] { PROPERTY_DOCUMENT }); - dispIdMember = rgdispid[0]; - pVarResult = webBrowser.getProperty(dispIdMember); + Variant pVarResult = webBrowser.getProperty(dispIdMember); if (pVarResult == null) return; if (pVarResult.getType() == COM.VT_EMPTY) { pVarResult.dispose(); |