563class SendRequestTest: public SingleResourceLoadTest {
564public:
565 MAKE_GLIB_TEST_FIXTURE(SendRequestTest);
566
567 void resourceSentRequest(WebKitWebResource* resource, WebKitURIRequest* request, WebKitURIResponse* redirectResponse)
568 {
569 if (resource != m_resource)
570 return;
571
572 g_assert_cmpstr(webkit_uri_request_get_uri(request), ==, m_expectedNewResourceURI.data());
573 g_assert_cmpstr(webkit_uri_request_get_uri(request), ==, webkit_web_resource_get_uri(resource));
574
575 SingleResourceLoadTest::resourceSentRequest(resource, request, redirectResponse);
576 }
577
578 void resourceFailed(WebKitWebResource* resource, GError* error)
579 {
580 if (resource != m_resource)
581 return;
582
583 g_assert_cmpstr(webkit_web_resource_get_uri(resource), ==, m_expectedCancelledResourceURI.data());
584 g_assert_error(error, WEBKIT_NETWORK_ERROR, WEBKIT_NETWORK_ERROR_CANCELLED);
585
586 SingleResourceLoadTest::resourceFailed(resource, error);
587 }
588
589 void setExpectedNewResourceURI(const CString& uri)
590 {
591 m_expectedNewResourceURI = uri;
592 }
593
594 void setExpectedCancelledResourceURI(const CString& uri)
595 {
596 m_expectedCancelledResourceURI = uri;
597 }
598
599 CString m_expectedNewResourceURI;
600 CString m_expectedCancelledResourceURI;
601};
602
603static void testWebResourceSendRequest(SendRequestTest* test, gconstpointer)
604{
605 test->setExpectedNewResourceURI(kServer->getURIForPath("/javascript.js"));
606 test->loadURI(kServer->getURIForPath("relative-javascript.html").data());
607 test->waitUntilResourceLoadFinished();
608 g_assert(test->m_resource);
609
610 Vector<SingleResourceLoadTest::LoadEvents>& events = test->m_loadEvents;
611 g_assert_cmpint(events.size(), ==, 5);
612 g_assert_cmpint(events[0], ==, SingleResourceLoadTest::Started);
613 g_assert_cmpint(events[1], ==, SingleResourceLoadTest::SentRequest);
614 g_assert_cmpint(events[2], ==, SingleResourceLoadTest::ReceivedResponse);
615 g_assert_cmpint(events[3], ==, SingleResourceLoadTest::ReceivedData);
616 g_assert_cmpint(events[4], ==, SingleResourceLoadTest::Finished);
617 events.clear();
618
619 // Cancel request.
620 test->setExpectedCancelledResourceURI(kServer->getURIForPath("/cancel-this.js"));
621 test->loadURI(kServer->getURIForPath("/resource-to-cancel.html").data());
622 test->waitUntilResourceLoadFinished();
623 g_assert(test->m_resource);
624
625 events = test->m_loadEvents;
626 g_assert_cmpint(events.size(), ==, 3);
627 g_assert_cmpint(events[0], ==, SingleResourceLoadTest::Started);
628 g_assert_cmpint(events[1], ==, SingleResourceLoadTest::Failed);
629 g_assert_cmpint(events[2], ==, SingleResourceLoadTest::Finished);
630 events.clear();
631}
632