summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT Browser/win32
diff options
context:
space:
mode:
authorGrant Gayed <ggayed>2011-01-18 21:10:14 +0000
committerGrant Gayed <ggayed>2011-01-18 21:10:14 +0000
commitf8ef3cf7f50531eb98cb5b6c6b6b74b2ed865cbd (patch)
tree135ee6e07a94b46687dccb44d3e4b46b604f5883 /bundles/org.eclipse.swt/Eclipse SWT Browser/win32
parent6de5d128065bf1d280a4f3338b044f38646dc566 (diff)
downloadeclipse.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
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Browser/win32')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java51
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();