0

optimization_guide: Add serialization for opaque origins.

Bug: 390482575
Change-Id: Ic8793e89ba9a7756c5b2af99141f64ae117c95fb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6393898
Commit-Queue: Khushal Sagar <khushalsagar@chromium.org>
Auto-Submit: Khushal Sagar <khushalsagar@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1438371}
This commit is contained in:
Khushal Sagar 2025-03-26 13:38:16 -07:00 committed by Chromium LUCI CQ
parent 5c3d91e8b2
commit c85ccc8acf
3 changed files with 40 additions and 21 deletions

@ -62,9 +62,13 @@ void AssertValidOrigin(
const url::Origin& expected) {
EXPECT_EQ(proto_origin.opaque(), expected.opaque());
url::Origin actual = url::Origin::Create(GURL(proto_origin.value()));
EXPECT_TRUE(actual.IsSameOriginWith(expected))
<< "actual: " << actual << ", expected: " << expected;
if (expected.opaque()) {
EXPECT_EQ(proto_origin.value(), expected.GetNonceForTesting()->ToString());
} else {
url::Origin actual = url::Origin::Create(GURL(proto_origin.value()));
EXPECT_TRUE(actual.IsSameOriginWith(expected))
<< "actual: " << actual << ", expected: " << expected;
}
}
class PageContentProtoProviderBrowserTest : public content::ContentBrowserTest {
@ -327,7 +331,9 @@ IN_PROC_BROWSER_TEST_F(PageContentProtoProviderBrowserTest,
EXPECT_EQ(iframe.content_attributes().attribute_type(),
optimization_guide::proto::CONTENT_ATTRIBUTE_IFRAME);
const auto& iframe_data = iframe.content_attributes().iframe_data();
EXPECT_TRUE(iframe_data.frame_data().security_origin().opaque());
AssertValidOrigin(iframe_data.frame_data().security_origin(),
ChildFrameAt(web_contents()->GetPrimaryMainFrame(), 0)
->GetLastCommittedOrigin());
EXPECT_FALSE(iframe_data.likely_ad_frame());
EXPECT_EQ(iframe.children_nodes().size(), 1);
@ -343,7 +349,9 @@ IN_PROC_BROWSER_TEST_F(PageContentProtoProviderBrowserTest,
EXPECT_EQ(iframe.content_attributes().attribute_type(),
optimization_guide::proto::CONTENT_ATTRIBUTE_IFRAME);
const auto& iframe_data = iframe.content_attributes().iframe_data();
EXPECT_TRUE(iframe_data.frame_data().security_origin().value().empty());
AssertValidOrigin(iframe_data.frame_data().security_origin(),
ChildFrameAt(web_contents()->GetPrimaryMainFrame(), 0)
->GetLastCommittedOrigin());
EXPECT_FALSE(iframe_data.likely_ad_frame());
EXPECT_EQ(iframe.children_nodes().size(), 1);

@ -18,7 +18,23 @@
namespace optimization_guide {
class SecurityOriginSerializer {
public:
static void Serialize(
const url::Origin& origin,
optimization_guide::proto::SecurityOrigin* proto_origin) {
proto_origin->set_opaque(origin.opaque());
if (origin.opaque()) {
proto_origin->set_value(origin.GetNonceForSerialization()->ToString());
} else {
proto_origin->set_value(origin.Serialize());
}
}
};
namespace {
optimization_guide::proto::ContentAttributeType ConvertAttributeType(
blink::mojom::AIPageContentAttributeType type) {
switch (type) {
@ -110,18 +126,6 @@ void ConvertGeometry(const blink::mojom::AIPageContentGeometry& mojom_geometry,
mojom_geometry.is_fixed_or_sticky_position);
}
void ConvertSecurityOrigin(
const url::Origin& origin,
optimization_guide::proto::SecurityOrigin* proto_origin) {
proto_origin->set_opaque(origin.opaque());
if (origin.opaque()) {
// TODO(khushalsagar) Serialize opaque origins.
} else {
proto_origin->set_value(origin.Serialize());
}
}
void ConvertNodeInteractionInfo(
const blink::mojom::AIPageContentNodeInteractionInfo&
mojom_node_interaction_info,
@ -227,8 +231,9 @@ void ConvertImageInfo(
proto_image_info->set_image_caption(*mojom_image_info.image_caption);
}
if (mojom_image_info.source_origin) {
ConvertSecurityOrigin(*mojom_image_info.source_origin,
proto_image_info->mutable_security_origin());
SecurityOriginSerializer::Serialize(
*mojom_image_info.source_origin,
proto_image_info->mutable_security_origin());
}
}
@ -495,8 +500,9 @@ void ConvertFrameData(
AIPageContentMetadata& metadata,
FrameTokenSet& frame_token_set) {
ConvertFrameMetadata(render_frame_info.url, mojom_frame_data, metadata);
ConvertSecurityOrigin(render_frame_info.source_origin,
proto_frame_data->mutable_security_origin());
SecurityOriginSerializer::Serialize(
render_frame_info.source_origin,
proto_frame_data->mutable_security_origin());
ConvertFrameInteractionInfo(
*mojom_frame_data.frame_interaction_info,
proto_frame_data->mutable_frame_interaction_info());

@ -62,6 +62,10 @@ namespace net {
class SchemefulSite;
} // namespace net
namespace optimization_guide {
class SecurityOriginSerializer;
}
namespace url {
namespace mojom {
@ -359,6 +363,7 @@ class COMPONENT_EXPORT(URL) Origin {
friend COMPONENT_EXPORT(URL) std::ostream& operator<<(std::ostream& out,
const Origin& origin);
friend class blink::StorageKeyTest;
friend class optimization_guide::SecurityOriginSerializer;
// Origin::Nonce is a wrapper around base::UnguessableToken that generates
// the random value only when the value is first accessed. The lazy generation