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

Side by Side Diff: content/browser/loader/intercepting_resource_handler_unittest.cc

Issue 2005273002: Move MimeTypeResourceHandler before ThrottlingResourceHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 4 years, 5 months 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/loader/intercepting_resource_handler.h"
6
7 #include <stdint.h>
8
9 #include <memory>
10
11 #include "base/files/file_path.h"
12 #include "base/location.h"
13 #include "base/logging.h"
14 #include "base/macros.h"
15 #include "base/single_thread_task_runner.h"
16 #include "base/threading/thread_task_runner_handle.h"
17 #include "content/public/browser/resource_controller.h"
18 #include "content/public/browser/resource_request_info.h"
19 #include "content/public/common/resource_response.h"
20 #include "content/public/common/webplugininfo.h"
21 #include "content/public/test/test_browser_thread_bundle.h"
22 #include "content/public/test/test_utils.h"
23 #include "net/url_request/url_request_context.h"
24 #include "testing/gtest/include/gtest/gtest.h"
25 #include "url/gurl.h"
26
27 namespace content {
28
29 namespace {
30
31 class TestResourceHandler : public ResourceHandler {
32 public:
33 TestResourceHandler()
34 : ResourceHandler(nullptr), buffer_(new net::IOBuffer(2048)) {}
35 ~TestResourceHandler() override {}
36
37 void SetController(ResourceController* controller) override {}
38
39 bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
40 ResourceResponse* response,
41 bool* defer) override {
42 NOTREACHED();
43 return false;
44 }
45
46 bool OnResponseStarted(ResourceResponse* response, bool* defer) override {
47 return true;
48 }
49
50 bool OnWillStart(const GURL& url, bool* defer) override { return false; }
51
52 bool OnBeforeNetworkStart(const GURL& url, bool* defer) override {
53 NOTREACHED();
54 return false;
55 }
56
57 bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
58 int* buf_size,
59 int min_size) override {
60 *buf = buffer_;
61 *buf_size = 2048;
62 return true;
63 }
64
65 bool OnReadCompleted(int bytes_read, bool* defer) override {
66 DCHECK_LT(bytes_read, 2048);
67 return true;
68 }
69
70 void OnResponseCompleted(const net::URLRequestStatus& status,
71 const std::string& security_info,
72 bool* defer) override {}
73
74 void OnDataDownloaded(int bytes_downloaded) override { NOTREACHED(); }
75
76 scoped_refptr<net::IOBuffer> buffer() { return buffer_; }
77
78 private:
79 scoped_refptr<net::IOBuffer> buffer_;
80 DISALLOW_COPY_AND_ASSIGN(TestResourceHandler);
81 };
82
83 class InterceptingResourceHandlerTest : public testing::Test {
84 public:
85 InterceptingResourceHandlerTest() {}
86
87 private:
88 TestBrowserThreadBundle thread_bundle_;
89 };
90
91 // Tests that the data received is transmitted to the newly created
92 // ResourceHandler.
93 TEST_F(InterceptingResourceHandlerTest, ResponseBodyHandling) {
mmenke 2016/07/19 21:42:33 Hrm...We aren't testing any of the failure cases (
mmenke 2016/07/19 21:42:33 Seems like we should also test the non-intercept c
clamy 2016/07/25 16:58:26 Done. I only included some of the failure cases, s
94 net::URLRequestContext context;
95 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
96 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
97 ResourceRequestInfo::AllocateForTesting(request.get(),
98 RESOURCE_TYPE_MAIN_FRAME,
99 nullptr, // context
100 0, // render_process_id
101 0, // render_view_id
102 0, // render_frame_id
103 true, // is_main_frame
104 false, // parent_is_main_frame
105 true, // allow_download
106 true, // is_async
107 false); // is_using_lofi
108
109 std::unique_ptr<ResourceHandler> old_handler(new TestResourceHandler());
110 scoped_refptr<net::IOBuffer> old_buffer =
111 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
112 std::unique_ptr<ResourceHandler> handler(
113 new InterceptingResourceHandler(std::move(old_handler), request.get()));
114 InterceptingResourceHandler* intercepting_handler =
115 static_cast<InterceptingResourceHandler*>(handler.get());
116
117 scoped_refptr<ResourceResponse> response(new ResourceResponse);
118
119 // Simulate the MimeSniffingResourceHandler buffering the data.
120 scoped_refptr<net::IOBuffer> read_buffer;
121 int buf_size = 0;
122 handler->OnWillRead(&read_buffer, &buf_size, -1);
123
124 char data[] = "The data";
mmenke 2016/07/19 21:42:33 const char kData
clamy 2016/07/25 16:58:25 Done.
125 CHECK_EQ(read_buffer.get(), old_buffer.get());
126 memcpy(read_buffer->data(), data, sizeof(data));
127
128 // Simulate the MimeSniffingResourceHandler asking the
129 // InterceptingResourceHandler to switch to a new handler.
130 std::unique_ptr<ResourceHandler> new_handler(new TestResourceHandler());
131 TestResourceHandler* new_test_handler =
132 static_cast<TestResourceHandler*>(new_handler.get());
133 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
mmenke 2016/07/19 21:42:33 Should check that the old handler gets the abort m
clamy 2016/07/25 16:58:25 Done.
134
135 // The response is received. The new ResourceHandler should be used handle
136 // the download.
137 bool defer = false;
138 handler->OnResponseStarted(response.get(), &defer);
139 EXPECT_FALSE(defer);
140
141 // It should not have received the download data yet.
142 EXPECT_FALSE(!memcmp(data, new_test_handler->buffer()->data(), sizeof(data)));
mmenke 2016/07/19 21:42:33 Have we put any data in new_test_handler->buffer()
clamy 2016/07/25 16:58:26 Done. The buffer is now populated with 0s at creat
143
144 // The read is replayed by the MimeSniffingResourceHandler. The data should
145 // have been received by the new handler.
146 handler->OnReadCompleted(sizeof(data), &defer);
147 EXPECT_FALSE(defer);
148 EXPECT_TRUE(!memcmp(data, new_test_handler->buffer()->data(), sizeof(data)));
mmenke 2016/07/19 21:42:33 Seems like we should check a second read, make sur
clamy 2016/07/25 16:58:26 Done.
149 }
150
151 } // namespace
152
153 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698