Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(975)

Unified Diff: content/browser/loader/url_loader_factory_impl_unittest.cc

Issue 2566943002: Dispatch transfer size update notification on mojo-loading (Closed)
Patch Set: fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/loader/url_loader_factory_impl_unittest.cc
diff --git a/content/browser/loader/url_loader_factory_impl_unittest.cc b/content/browser/loader/url_loader_factory_impl_unittest.cc
index 8eefe67405012bdcfd50ff06e5f1270e58628ae6..104e39c302500f17e87ba9cd9019579c1f02e2db 100644
--- a/content/browser/loader/url_loader_factory_impl_unittest.cc
+++ b/content/browser/loader/url_loader_factory_impl_unittest.cc
@@ -20,6 +20,7 @@
#include "base/message_loop/message_loop.h"
#include "base/path_service.h"
#include "base/run_loop.h"
+#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/loader/mojo_async_resource_handler.h"
#include "content/browser/loader/navigation_resource_throttle.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
@@ -89,6 +90,12 @@ class URLLoaderFactoryImplTest : public ::testing::TestWithParam<size_t> {
nullptr,
base::Bind(&URLLoaderFactoryImplTest::GetContexts,
base::Unretained(this)))) {
+ // Some tests specify request.report_raw_headers, but the RDH checks the
+ // CanReadRawCookies permission before enabling it.
+ ChildProcessSecurityPolicyImpl::GetInstance()->Add(kChildId);
+ ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadRawCookies(
+ kChildId);
+
resource_message_filter_->InitializeForTest();
MojoAsyncResourceHandler::SetAllocationSizeForTesting(GetParam());
rdh_.SetLoaderDelegate(&loader_deleate_);
@@ -103,6 +110,7 @@ class URLLoaderFactoryImplTest : public ::testing::TestWithParam<size_t> {
}
~URLLoaderFactoryImplTest() override {
+ ChildProcessSecurityPolicyImpl::GetInstance()->Remove(kChildId);
rdh_.SetDelegate(nullptr);
net::URLRequestFilter::GetInstance()->ClearHandlers();
@@ -204,10 +212,15 @@ TEST_P(URLLoaderFactoryImplTest, GetResponse) {
base::ReadFileToString(
root.Append(base::FilePath(FILE_PATH_LITERAL("hello.html"))), &expected);
EXPECT_EQ(expected, contents);
- EXPECT_EQ(static_cast<int64_t>(expected.size()),
+ EXPECT_EQ(static_cast<int64_t>(expected.size()) +
+ client.response_head().encoded_data_length,
client.completion_status().encoded_data_length);
EXPECT_EQ(static_cast<int64_t>(expected.size()),
client.completion_status().encoded_body_length);
+ // OnTransferSizeUpdated is not dispatched as report_raw_headers is not set.
+ EXPECT_EQ(0, client.body_transfer_size());
+ EXPECT_GT(client.response_head().encoded_data_length, 0);
+ EXPECT_GT(client.completion_status().encoded_data_length, 0);
}
TEST_P(URLLoaderFactoryImplTest, GetFailedResponse) {
@@ -382,7 +395,8 @@ TEST_P(URLLoaderFactoryImplTest, DownloadToFile) {
base::ReadFileToString(
root.Append(base::FilePath(FILE_PATH_LITERAL("hello.html"))), &expected);
EXPECT_EQ(expected, contents);
- EXPECT_EQ(static_cast<int64_t>(expected.size()),
+ EXPECT_EQ(static_cast<int64_t>(expected.size()) +
+ client.response_head().encoded_data_length,
client.completion_status().encoded_data_length);
EXPECT_EQ(static_cast<int64_t>(expected.size()),
client.completion_status().encoded_body_length);
@@ -447,6 +461,67 @@ TEST_P(URLLoaderFactoryImplTest, DownloadToFileFailure) {
EXPECT_EQ(net::ERR_ABORTED, client.completion_status().error_code);
}
+TEST_P(URLLoaderFactoryImplTest, OnTransferSizeUpdated) {
+ constexpr int32_t kRoutingId = 81;
+ constexpr int32_t kRequestId = 28;
+ NavigationResourceThrottle::set_ui_checks_always_succeed_for_testing(true);
+ mojom::URLLoaderAssociatedPtr loader;
+ base::FilePath root;
+ PathService::Get(DIR_TEST_DATA, &root);
+ net::URLRequestMockHTTPJob::AddUrlHandlers(root,
+ BrowserThread::GetBlockingPool());
+ ResourceRequest request;
+ TestURLLoaderClient client;
+ // Assume the file contents is small enough to be stored in the data pipe.
+ request.url = net::URLRequestMockHTTPJob::GetMockUrl("gzip-content.svgz");
+ request.method = "GET";
+ // |resource_type| can't be a frame type. It is because when PlzNavigate is
+ // enabled, the url scheme of frame type requests from the renderer process
+ // must be blob scheme.
+ request.resource_type = RESOURCE_TYPE_XHR;
+ // Need to set |request_initiator| for non main frame type request.
+ request.request_initiator = url::Origin();
+ request.report_raw_headers = true;
+ factory_->CreateLoaderAndStart(
+ mojo::GetProxy(&loader, factory_.associated_group()), kRoutingId,
+ kRequestId, request,
+ client.CreateRemoteAssociatedPtrInfo(factory_.associated_group()));
+
+ client.RunUntilComplete();
+
+ std::string contents;
+ while (true) {
+ char buffer[16];
+ uint32_t read_size = sizeof(buffer);
+ MojoResult r = mojo::ReadDataRaw(client.response_body(), buffer, &read_size,
+ MOJO_READ_DATA_FLAG_NONE);
+ if (r == MOJO_RESULT_FAILED_PRECONDITION)
+ break;
+ if (r == MOJO_RESULT_SHOULD_WAIT)
+ continue;
+ ASSERT_EQ(MOJO_RESULT_OK, r);
+ contents.append(buffer, read_size);
+ }
+
+ std::string expected_encoded_body;
+ base::ReadFileToString(
+ root.Append(base::FilePath(FILE_PATH_LITERAL("gzip-content.svgz"))),
+ &expected_encoded_body);
+
+ EXPECT_GT(client.response_head().encoded_data_length, 0);
+ EXPECT_GT(client.completion_status().encoded_data_length, 0);
+ EXPECT_EQ(static_cast<int64_t>(expected_encoded_body.size()),
+ client.body_transfer_size());
+ EXPECT_EQ(200, client.response_head().headers->response_code());
+ EXPECT_EQ(
+ client.response_head().encoded_data_length + client.body_transfer_size(),
+ client.completion_status().encoded_data_length);
+ EXPECT_NE(client.body_transfer_size(), static_cast<int64_t>(contents.size()));
+ EXPECT_EQ(client.body_transfer_size(),
+ client.completion_status().encoded_body_length);
+ EXPECT_EQ(contents, "Hello World!\n");
+}
+
// Removing the loader in the remote side will cancel the request.
TEST_P(URLLoaderFactoryImplTest, CancelFromRenderer) {
constexpr int32_t kRoutingId = 81;
« no previous file with comments | « content/browser/loader/test_url_loader_client.cc ('k') | content/browser/service_worker/service_worker_fetch_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698