Commit 762e863
[Win32] Fix BrowserFunction missing on first page
A BrowserFunction created while an Edge/WebView2 browser is still
initializing (with a navigation queued via setUrl/setText) could be
missing on the first loaded page: AddScriptToExecuteOnDocumentCreated
was issued only after the queued navigation and raced with document
creation, so the function was sometimes not yet registered when the
page's document was created.
With the change, we register the document-created scripts of all pending
BrowserFunctions inside WebViewProvider.initializeWebView(), before
completing the initialization future. Completing the future
synchronously runs the queued navigation, so registering beforehand
guarantees the functions are in place before the first document is
created. This is the only point that is reliably "after init, before the
first navigation", since a CompletableFuture navigation chain cannot be
preempted retroactively.
Registration is now issued asynchronously (fire-and-forget). What makes
a function land on a page is issuing the registration before the
navigation is issued to WebView2, not waiting for its completion. As a
result the previous inCallback>0 deferral is no longer needed (an async
call cannot deadlock inside a WebView2 callback) and the separate
synchronous registration method is removed, leaving a single
registration method and a single branch in createFunction.
deregisterFunction stays correct for a registration whose script ID has
not arrived yet: the async completion callback detects the removed
function via the functions map and removes the just-registered script
itself.
Fixes #3370
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent 9b8609b commit 762e863
2 files changed
Lines changed: 191 additions & 23 deletions
File tree
- bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser
- tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit
Lines changed: 67 additions & 23 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
386 | 386 | | |
387 | 387 | | |
388 | 388 | | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
389 | 396 | | |
390 | 397 | | |
391 | 398 | | |
| |||
399 | 406 | | |
400 | 407 | | |
401 | 408 | | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
402 | 417 | | |
403 | 418 | | |
404 | 419 | | |
| |||
1839 | 1854 | | |
1840 | 1855 | | |
1841 | 1856 | | |
1842 | | - | |
1843 | | - | |
1844 | | - | |
1845 | | - | |
1846 | | - | |
| 1857 | + | |
| 1858 | + | |
| 1859 | + | |
| 1860 | + | |
| 1861 | + | |
| 1862 | + | |
| 1863 | + | |
| 1864 | + | |
| 1865 | + | |
| 1866 | + | |
| 1867 | + | |
| 1868 | + | |
1847 | 1869 | | |
1848 | 1870 | | |
1849 | 1871 | | |
1850 | 1872 | | |
| 1873 | + | |
| 1874 | + | |
| 1875 | + | |
| 1876 | + | |
1851 | 1877 | | |
1852 | | - | |
1853 | | - | |
1854 | | - | |
1855 | | - | |
1856 | | - | |
1857 | | - | |
1858 | | - | |
1859 | | - | |
1860 | | - | |
1861 | | - | |
| 1878 | + | |
| 1879 | + | |
1862 | 1880 | | |
1863 | | - | |
1864 | 1881 | | |
1865 | 1882 | | |
1866 | | - | |
1867 | | - | |
1868 | | - | |
1869 | | - | |
1870 | | - | |
1871 | | - | |
1872 | | - | |
| 1883 | + | |
| 1884 | + | |
| 1885 | + | |
| 1886 | + | |
| 1887 | + | |
| 1888 | + | |
| 1889 | + | |
| 1890 | + | |
| 1891 | + | |
| 1892 | + | |
1873 | 1893 | | |
1874 | 1894 | | |
1875 | 1895 | | |
| 1896 | + | |
| 1897 | + | |
| 1898 | + | |
| 1899 | + | |
| 1900 | + | |
| 1901 | + | |
| 1902 | + | |
| 1903 | + | |
| 1904 | + | |
| 1905 | + | |
| 1906 | + | |
| 1907 | + | |
| 1908 | + | |
| 1909 | + | |
| 1910 | + | |
| 1911 | + | |
| 1912 | + | |
| 1913 | + | |
| 1914 | + | |
| 1915 | + | |
| 1916 | + | |
| 1917 | + | |
1876 | 1918 | | |
1877 | 1919 | | |
1878 | 1920 | | |
| |||
1881 | 1923 | | |
1882 | 1924 | | |
1883 | 1925 | | |
| 1926 | + | |
| 1927 | + | |
1884 | 1928 | | |
1885 | 1929 | | |
1886 | 1930 | | |
Lines changed: 124 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3045 | 3045 | | |
3046 | 3046 | | |
3047 | 3047 | | |
| 3048 | + | |
| 3049 | + | |
| 3050 | + | |
| 3051 | + | |
| 3052 | + | |
| 3053 | + | |
| 3054 | + | |
| 3055 | + | |
| 3056 | + | |
| 3057 | + | |
| 3058 | + | |
| 3059 | + | |
| 3060 | + | |
| 3061 | + | |
| 3062 | + | |
| 3063 | + | |
| 3064 | + | |
| 3065 | + | |
| 3066 | + | |
| 3067 | + | |
| 3068 | + | |
| 3069 | + | |
| 3070 | + | |
| 3071 | + | |
| 3072 | + | |
| 3073 | + | |
| 3074 | + | |
| 3075 | + | |
| 3076 | + | |
| 3077 | + | |
| 3078 | + | |
| 3079 | + | |
| 3080 | + | |
| 3081 | + | |
| 3082 | + | |
| 3083 | + | |
| 3084 | + | |
| 3085 | + | |
| 3086 | + | |
| 3087 | + | |
| 3088 | + | |
| 3089 | + | |
| 3090 | + | |
| 3091 | + | |
| 3092 | + | |
| 3093 | + | |
| 3094 | + | |
| 3095 | + | |
| 3096 | + | |
| 3097 | + | |
| 3098 | + | |
| 3099 | + | |
| 3100 | + | |
| 3101 | + | |
| 3102 | + | |
| 3103 | + | |
| 3104 | + | |
| 3105 | + | |
| 3106 | + | |
| 3107 | + | |
| 3108 | + | |
| 3109 | + | |
| 3110 | + | |
| 3111 | + | |
| 3112 | + | |
| 3113 | + | |
| 3114 | + | |
| 3115 | + | |
| 3116 | + | |
| 3117 | + | |
| 3118 | + | |
| 3119 | + | |
| 3120 | + | |
| 3121 | + | |
| 3122 | + | |
| 3123 | + | |
| 3124 | + | |
| 3125 | + | |
| 3126 | + | |
| 3127 | + | |
| 3128 | + | |
| 3129 | + | |
| 3130 | + | |
| 3131 | + | |
| 3132 | + | |
| 3133 | + | |
| 3134 | + | |
| 3135 | + | |
| 3136 | + | |
| 3137 | + | |
| 3138 | + | |
| 3139 | + | |
| 3140 | + | |
| 3141 | + | |
| 3142 | + | |
| 3143 | + | |
| 3144 | + | |
| 3145 | + | |
| 3146 | + | |
| 3147 | + | |
| 3148 | + | |
| 3149 | + | |
| 3150 | + | |
| 3151 | + | |
| 3152 | + | |
| 3153 | + | |
| 3154 | + | |
| 3155 | + | |
| 3156 | + | |
| 3157 | + | |
| 3158 | + | |
| 3159 | + | |
| 3160 | + | |
| 3161 | + | |
| 3162 | + | |
| 3163 | + | |
| 3164 | + | |
| 3165 | + | |
| 3166 | + | |
| 3167 | + | |
| 3168 | + | |
| 3169 | + | |
| 3170 | + | |
| 3171 | + | |
3048 | 3172 | | |
3049 | 3173 | | |
3050 | 3174 | | |
| |||
0 commit comments