blob: d82584e59b574e1c8606cc0dad83943bcacbeaae [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/webid/document_metadata.h"
#include "base/run_loop.h"
#include "base/test/bind.h"
#include "base/test/test_future.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/mojom/webid/federated_request.mojom.h"
namespace content {
class DocumentMetadataBrowserTest : public ContentBrowserTest {
public:
DocumentMetadataBrowserTest() = default;
};
IN_PROC_BROWSER_TEST_F(DocumentMetadataBrowserTest, RetrieveLoginActions) {
ASSERT_TRUE(embedded_test_server()->Start());
// Create a page with JSON-LD.
std::string html_content = R"(
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LoginAction",
"federation": {
"providers": [{
"@type": "FederatedLoginProvider",
"configURL": "https://idp.example/config.json",
"clientId": "1234",
"nonce": "4567",
"fields": ["email", "name", "picture"]
}]
}
}
</script>
</head>
<body>
<h1>Login to Test Page</h1>
</body>
</html>
)";
EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html," + html_content)));
webid::DocumentMetadata metadata(
shell()->web_contents()->GetPrimaryMainFrame());
base::test::TestFuture<
std::vector<blink::mojom::IdentityProviderGetParametersPtr>>
future;
metadata.GetLoginActions(future.GetCallback());
auto actions = future.Take();
ASSERT_EQ(actions.size(), 1u);
const auto& params = actions[0];
ASSERT_EQ(params->providers.size(), 1u);
const auto& provider = params->providers[0];
EXPECT_EQ(provider->config->config_url,
GURL("https://idp.example/config.json"));
EXPECT_EQ(provider->config->client_id, "1234");
EXPECT_EQ(provider->nonce, "4567");
ASSERT_TRUE(provider->fields.has_value());
EXPECT_THAT(*provider->fields,
testing::ElementsAre("email", "name", "picture"));
}
} // namespace content