tests: Fix CorsTest.Iframe failures (see issue #3348)

Run test initialization after the server has started.
This commit is contained in:
Marshall Greenblatt
2022-11-15 14:45:55 -05:00
parent 47d69a842a
commit 216e5b31dd

View File

@@ -253,13 +253,16 @@ struct TestSetup {
return GetResource(request->GetURL(), request->GetMethod()); return GetResource(request->GetURL(), request->GetMethod());
} }
// Optional initialization after the test server is started.
virtual void Initialize() {}
// Validate expected initial state. // Validate expected initial state.
void Validate() const { DCHECK(!resources.empty()); } void Validate() const { DCHECK(!resources.empty()); }
std::string GetMainURL() const { return resources.front()->GetPathURL(); } std::string GetMainURL() const { return resources.front()->GetPathURL(); }
// Returns true if the server will be used. // Returns true if the server will be used.
bool NeedsServer() const { virtual bool NeedsServer() const {
ResourceList::const_iterator it = resources.begin(); ResourceList::const_iterator it = resources.begin();
for (; it != resources.end(); ++it) { for (; it != resources.end(); ++it) {
Resource* resource = *it; Resource* resource = *it;
@@ -346,9 +349,7 @@ class TestServerObserver : public test_server::ObserverHelper {
class CorsTestHandler : public RoutingTestHandler { class CorsTestHandler : public RoutingTestHandler {
public: public:
explicit CorsTestHandler(TestSetup* setup) : setup_(setup) { explicit CorsTestHandler(TestSetup* setup) : setup_(setup) {}
setup_->Validate();
}
void RunTest() override { void RunTest() override {
StartServer(base::BindOnce(&CorsTestHandler::TriggerCreateBrowser, this)); StartServer(base::BindOnce(&CorsTestHandler::TriggerCreateBrowser, this));
@@ -489,6 +490,9 @@ class CorsTestHandler : public RoutingTestHandler {
protected: protected:
void TriggerCreateBrowser() { void TriggerCreateBrowser() {
setup_->Initialize();
setup_->Validate();
main_url_ = setup_->GetMainURL(); main_url_ = setup_->GetMainURL();
CreateBrowser(main_url_); CreateBrowser(main_url_);
} }
@@ -824,18 +828,45 @@ void SetupIframeRequest(CookieTestSetup* setup,
setup->AddResource(iframe_resource); setup->AddResource(iframe_resource);
} }
struct IframeTestSetup : CookieTestSetup {
IframeTestSetup(const std::string& test_name,
HandlerType main_handler,
HandlerType iframe_handler,
const std::string& sandbox_attribs)
: test_name_(test_name),
main_handler_(main_handler),
iframe_handler_(iframe_handler),
sandbox_attribs_(sandbox_attribs) {}
bool NeedsServer() const override {
return main_handler_ == HandlerType::SERVER ||
iframe_handler_ == HandlerType::SERVER;
}
void Initialize() override {
SetupIframeRequest(this, test_name_, main_handler_, &resource_main_,
iframe_handler_, &resource_iframe_, sandbox_attribs_);
}
private:
const std::string test_name_;
const HandlerType main_handler_;
const HandlerType iframe_handler_;
const std::string sandbox_attribs_;
CookieResource resource_main_;
CookieResource resource_iframe_;
};
} // namespace } // namespace
// Test iframe sandbox attributes with different origin combinations. // Test iframe sandbox attributes with different origin combinations.
#define CORS_TEST_IFRAME(test_name, handler_main, handler_iframe, \ #define CORS_TEST_IFRAME(test_name, handler_main, handler_iframe, \
sandbox_attribs) \ sandbox_attribs) \
TEST(CorsTest, Iframe##test_name) { \ TEST(CorsTest, Iframe##test_name) { \
CookieTestSetup setup; \ IframeTestSetup setup("CorsTest.Iframe" #test_name, \
CookieResource resource_main, resource_iframe; \ HandlerType::handler_main, \
SetupIframeRequest(&setup, "CorsTest.Iframe" #test_name, \ HandlerType::handler_iframe, sandbox_attribs); \
HandlerType::handler_main, &resource_main, \
HandlerType::handler_iframe, &resource_iframe, \
sandbox_attribs); \
CefRefPtr<CorsTestHandler> handler = new CorsTestHandler(&setup); \ CefRefPtr<CorsTestHandler> handler = new CorsTestHandler(&setup); \
handler->ExecuteTest(); \ handler->ExecuteTest(); \
ReleaseAndWaitForDestructor(handler); \ ReleaseAndWaitForDestructor(handler); \