1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
content / test / fenced_frame_test_utils.h [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_TEST_FENCED_FRAME_TEST_UTILS_H_
#define CONTENT_TEST_FENCED_FRAME_TEST_UTILS_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
#include "content/browser/fenced_frame/fenced_frame_reporter.h"
#include "content/browser/fenced_frame/fenced_frame_url_mapping.h"
#include "net/base/net_errors.h"
#include "net/base/schemeful_site.h"
namespace content {
class FrameTreeNode;
class RenderFrameHost;
class MappingResultObserver;
// `node` is expected to be the child FrameTreeNode created in response to a
// <fencedframe> element being created. This method returns the FrameTreeNode of
// the fenced frame's inner FrameTree.
FrameTreeNode* GetFencedFrameRootNode(FrameTreeNode* node);
void SimulateSharedStorageURNMappingComplete(
FencedFrameURLMapping& fenced_frame_url_mapping,
const GURL& urn_uuid,
const GURL& mapped_url,
const net::SchemefulSite& shared_storage_site,
double budget_to_charge,
scoped_refptr<FencedFrameReporter> fenced_frame_reporter = nullptr);
// Tests can use this class to observe and check the URL mapping result.
class TestFencedFrameURLMappingResultObserver
: public FencedFrameURLMapping::MappingResultObserver {
public:
TestFencedFrameURLMappingResultObserver();
~TestFencedFrameURLMappingResultObserver() override;
void OnFencedFrameURLMappingComplete(
const std::optional<FencedFrameProperties>& properties) override;
bool mapping_complete_observed() const { return mapping_complete_observed_; }
const std::optional<FencedFrameProperties>& fenced_frame_properties() {
return observed_fenced_frame_properties_;
}
std::optional<GURL> mapped_url() const {
if (!observed_fenced_frame_properties_ ||
!observed_fenced_frame_properties_->mapped_url()) {
return std::nullopt;
}
return observed_fenced_frame_properties_->mapped_url()
->GetValueIgnoringVisibility();
}
std::optional<std::vector<std::pair<GURL, FencedFrameConfig>>>
nested_urn_config_pairs() const {
if (!observed_fenced_frame_properties_ ||
!observed_fenced_frame_properties_->nested_urn_config_pairs()) {
return std::nullopt;
}
return observed_fenced_frame_properties_->nested_urn_config_pairs()
->GetValueIgnoringVisibility();
}
std::optional<AdAuctionData> ad_auction_data() const {
if (!observed_fenced_frame_properties_ ||
!observed_fenced_frame_properties_->ad_auction_data()) {
return std::nullopt;
}
return observed_fenced_frame_properties_->ad_auction_data()
->GetValueIgnoringVisibility();
}
const base::RepeatingClosure& on_navigate_callback() const {
return observed_fenced_frame_properties_->on_navigate_callback();
}
FencedFrameReporter* fenced_frame_reporter() {
if (!observed_fenced_frame_properties_) {
return nullptr;
}
return observed_fenced_frame_properties_->fenced_frame_reporter().get();
}
private:
bool mapping_complete_observed_ = false;
std::optional<FencedFrameProperties> observed_fenced_frame_properties_;
};
class FencedFrameURLMappingTestPeer {
public:
FencedFrameURLMappingTestPeer() = delete;
explicit FencedFrameURLMappingTestPeer(
FencedFrameURLMapping* fenced_frame_url_mapping)
: fenced_frame_url_mapping_(fenced_frame_url_mapping) {}
bool HasObserver(const GURL& urn_uuid,
FencedFrameURLMapping::MappingResultObserver* observer);
// Returns as an out parameter the `ReportingMetadata`'s map for value
// `"shared-storage-select-url"` associated with `urn_uuid`, or leaves the out
// parameter unchanged if there's no shared storage reporting metadata
// associated (i.e. `urn_uuid` did not originate from shared storage or else
// there was no metadata passed from JavaScript). Precondition: `urn_uuid`
// exists in `urn_uuid_to_url_map_`.
void GetSharedStorageReportingMap(
const GURL& urn_uuid,
SharedStorageReportingMap* out_reporting_map);
// Insert urn mappings until it reaches the limit.
void FillMap(const GURL& url);
private:
raw_ptr<FencedFrameURLMapping> fenced_frame_url_mapping_;
};
// TODO(xiaochenzh): Once fenced frame size freezing has no time gap, remove
// this.
// This function keeps polling the evaluation result of the given script until
// it returns true or times out.
// Currently this is only used to check the fenced frame size freezing behavior.
// The size freezing only takes effect after layout has happened.
bool PollUntilEvalToTrue(const std::string& script, RenderFrameHost* rfh);
} // namespace content
#endif // CONTENT_TEST_FENCED_FRAME_TEST_UTILS_H_