diff options
| author | Nikita Nemkin | 2021-06-02 15:10:19 +0000 |
|---|---|---|
| committer | Niraj Modi | 2021-06-02 15:49:45 +0000 |
| commit | 31b3cd263c44bb6c1c78393d023debd6353514a2 (patch) | |
| tree | 9f25d9dbf587bcb5919914f5e959a26ea50f8018 | |
| parent | 5b6f96abb67999b310d7d06bfd67d074b54b88c7 (diff) | |
| download | eclipse.platform.swt-31b3cd263c44bb6c1c78393d023debd6353514a2.tar.gz eclipse.platform.swt-31b3cd263c44bb6c1c78393d023debd6353514a2.tar.xz eclipse.platform.swt-31b3cd263c44bb6c1c78393d023debd6353514a2.zip | |
Bug 573092 - Incorrect DLL Name Constant for SWT Browser style SWT.EDGE
Allow loading JNI libraries without any platform or version suffix.
The latter is abused by Edge browser back-end to extract (if necessary)
and load WebView2Loader.dll.
Change-Id: I458795a6d54f0ec89405cafc810a2ba5f7a9b4b7
Signed-off-by: Nikita Nemkin <nikita@nemkin.ru>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/181275
Reviewed-by: Sravan Kumar Lakkimsetti <sravankumarl@in.ibm.com>
Reviewed-by: Niraj Modi <niraj.modi@in.ibm.com>
Tested-by: Niraj Modi <niraj.modi@in.ibm.com>
| -rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java | 4 | ||||
| -rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java | 54 |
2 files changed, 34 insertions, 24 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java index 9a4f8ecdce..9f9a74d55f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Nikita Nemkin and others. + * Copyright (c) 2020, 2021 Nikita Nemkin and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -25,7 +25,7 @@ import org.eclipse.swt.widgets.*; class Edge extends WebBrowser { static { - Library.loadLibrary("WebView2Loader", false); + Library.loadLibrary("WebView2Loader"); } // WebView2Loader.dll compatible version. This is NOT the minimal required version. diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java index d44e6bf6ef..c878ed3cd1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/Library.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2020 IBM Corporation and others. + * Copyright (c) 2000, 2021 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -279,15 +279,20 @@ public static void loadLibrary (String name, boolean mapName) { } /* Compute the library name and mapped name */ - String libName1, libName2, mappedName1, mappedName2; + final int candidates = 3; + String[] libNames = new String[candidates], mappedNames = new String[candidates]; if (mapName) { String version = getVersionString (); - libName1 = name + "-" + Platform.PLATFORM + "-" + version; //$NON-NLS-1$ //$NON-NLS-2$ - libName2 = name + "-" + Platform.PLATFORM; //$NON-NLS-1$ - mappedName1 = mapLibraryName (libName1); - mappedName2 = mapLibraryName (libName2); + libNames[0] = name + "-" + Platform.PLATFORM + "-" + version; //$NON-NLS-1$ //$NON-NLS-2$ + libNames[1] = name + "-" + Platform.PLATFORM; //$NON-NLS-1$ + libNames[2] = name; + for (int i = 0; i < candidates; i++) { + mappedNames[i] = mapLibraryName (libNames[i]); + } } else { - libName1 = libName2 = mappedName1 = mappedName2 = name; + for (int i = 0; i < candidates; i++) { + libNames[i] = mappedNames[i] = name; + } } StringBuilder message = new StringBuilder(); @@ -296,20 +301,24 @@ public static void loadLibrary (String name, boolean mapName) { String path = System.getProperty (SWT_LIB_PATH); //$NON-NLS-1$ if (path != null) { path = new File (path).getAbsolutePath (); - if (load (path + SEPARATOR + mappedName1, message)) return; - if (mapName && load (path + SEPARATOR + mappedName2, message)) return; + for (int i = 0; i < candidates; i++) { + if ((i == 0 || mapName) && load (path + SEPARATOR + mappedNames[i], message)) return; + } } /* Try loading library from java library path */ - if (load (libName1, message)) return; - if (mapName && load (libName2, message)) return; + for (int i = 0; i < candidates; i++) { + if ((i == 0 || mapName) && load (libNames[i], message)) return; + } /* Try loading library from the tmp directory if swt library path is not specified. * Create the tmp folder if it doesn't exist. Tmp folder looks like this: * ~/.swt/lib/<platform>/<arch>/ */ - String fileName1 = mappedName1; - String fileName2 = mappedName2; + String[] fileNames = new String[candidates]; + for (int i = 0; i < candidates; i++) { + fileNames[i] = mappedNames[i]; + } if (path == null) { path = USER_HOME; File dir = new File (path, SWT_LIB_DIR); @@ -317,20 +326,21 @@ public static void loadLibrary (String name, boolean mapName) { path = dir.getAbsolutePath (); } else { /* fall back to using the home dir directory */ - fileName1 = mapLibraryName (libName1 + SUFFIX_64); - fileName2 = mapLibraryName (libName2 + SUFFIX_64); + for (int i = 0; i < candidates; i++) { + fileNames[i] = mapLibraryName (libNames[i] + SUFFIX_64); + } + } + for (int i = 0; i < candidates; i++) { + if ((i == 0 || mapName) && load (path + SEPARATOR + fileNames[i], message)) return; } - if (load (path + SEPARATOR + fileName1, message)) return; - if (mapName && load (path + SEPARATOR + fileName2, message)) return; } /* Try extracting and loading library from jar. */ if (path != null) { - if (extract (path + SEPARATOR + fileName1, mappedName1)) { - if (load(path + SEPARATOR + fileName1, message)) return; - } - if (mapName && extract (path + SEPARATOR + fileName2, mappedName2)) { - if (load(path + SEPARATOR + fileName2, message)) return; + for (int i = 0; i < candidates; i++) { + if ((i == 0 || mapName) && extract (path + SEPARATOR + fileNames[i], mappedNames[i])) { + if (load(path + SEPARATOR + fileNames[i], message)) return; + } } } |
