Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
8275138: WebView: UserAgent string is empty for first request
Backport-of: d6f78e2
  • Loading branch information
kevinrushforth committed Nov 4, 2021
1 parent 7b9e7ee commit 75a2f44
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 18 deletions.
Expand Up @@ -220,6 +220,13 @@ void FrameLoaderClientJava::dispatchDidNavigateWithinPage()
1.0 /* progress */);
}

// Called from twkInit to initialize the client. This will ensure that
// the page field is initialized before any operation that needs it
void FrameLoaderClientJava::init()
{
(void)page();
}

Page* FrameLoaderClientJava::page()
{
if (!m_page) {
Expand Down
Expand Up @@ -46,6 +46,8 @@ class FrameLoaderClientJava final : public FrameLoaderClient {
FrameLoaderClientJava(const JLObject &webPage);
~FrameLoaderClientJava();

void init();

bool hasWebView() const override;

void makeRepresentation(DocumentLoader*) override;
Expand Down
Expand Up @@ -924,8 +924,11 @@ JNIEXPORT void JNICALL Java_com_sun_webkit_WebPage_twkInit
page->setDeviceScaleFactor(devicePixelScale);

settings.setLinkPrefetchEnabled(true);
static_cast<FrameLoaderClientJava&>(page->mainFrame().loader().client())
.setFrame(&page->mainFrame());

FrameLoaderClientJava& client =
static_cast<FrameLoaderClientJava&>(page->mainFrame().loader().client());
client.init();
client.setFrame(&page->mainFrame());

page->mainFrame().init();

Expand Down
Expand Up @@ -404,6 +404,25 @@ void waitForCompletion() {
}
}

private void verifyUserAgentString(String userAgentString) {
final String fxVersion = System.getProperty("javafx.runtime.version");
final String numericStr = fxVersion.split("[^0-9]")[0];
final String fxVersionString = "JavaFX/" + numericStr;
assertTrue("UserAgentString does not contain " + fxVersionString, userAgentString.contains(fxVersionString));

File webkitLicense = new File("src/main/legal/webkit.md");
assertTrue("File does not exist: " + webkitLicense, webkitLicense.exists());

try (final BufferedReader licenseText = new BufferedReader(new FileReader(webkitLicense))) {
final String firstLine = licenseText.readLine().trim();
final String webkitVersion = firstLine.substring(firstLine.lastIndexOf(" ") + 2);
assertTrue("webkitVersion should not be empty", webkitVersion.length() > 0);
assertTrue("UserAgentString does not contain: " + webkitVersion, userAgentString.contains(webkitVersion));
} catch (IOException ex){
throw new AssertionError(ex);
}
}

/**
* @test
* @bug 8193207
Expand All @@ -412,22 +431,24 @@ void waitForCompletion() {
@Test public void testUserAgentString() {
submit(() -> {
final String userAgentString = getEngine().getUserAgent();
final String fxVersion = System.getProperty("javafx.runtime.version");
final String numericStr = fxVersion.split("[^0-9]")[0];
final String fxVersionString = "JavaFX/" + numericStr;
assertTrue("UserAgentString does not contain " + fxVersionString, userAgentString.contains(fxVersionString));

File webkitLicense = new File("src/main/legal/webkit.md");
assertTrue("File does not exist: " + webkitLicense, webkitLicense.exists());

try (final BufferedReader licenseText = new BufferedReader(new FileReader(webkitLicense))) {
final String firstLine = licenseText.readLine().trim();
final String webkitVersion = firstLine.substring(firstLine.lastIndexOf(" ") + 2);
assertTrue("webkitVersion should not be empty", webkitVersion.length() > 0);
assertTrue("UserAgentString does not contain: " + webkitVersion, userAgentString.contains(webkitVersion));
} catch (IOException ex){
throw new AssertionError(ex);
}
verifyUserAgentString(userAgentString);
});
}

/**
* @test
* @bug 8275138
* Check UserAgentString from JavaScript for javafx runtime version and webkit version
*/
@Test public void testUserAgentStringJS() {
final WebEngine webEngine = createWebEngine();
submit(() -> {
final JSObject window = (JSObject) webEngine.executeScript("window");
assertNotNull(window);
webEngine.executeScript("var userAgent = navigator.userAgent");
String userAgentString = (String)window.getMember("userAgent");
assertNotNull(userAgentString);
verifyUserAgentString(userAgentString);
});
}

Expand Down

1 comment on commit 75a2f44

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.