OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/loader/async_resource_handler.h" | 5 #include "content/browser/loader/async_resource_handler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <memory> | 9 #include <memory> |
10 #include <string> | 10 #include <string> |
(...skipping 15 matching lines...) Expand all Loading... | |
26 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 26 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
27 #include "content/browser/loader/resource_loader.h" | 27 #include "content/browser/loader/resource_loader.h" |
28 #include "content/browser/loader/resource_loader_delegate.h" | 28 #include "content/browser/loader/resource_loader_delegate.h" |
29 #include "content/browser/loader/resource_message_filter.h" | 29 #include "content/browser/loader/resource_message_filter.h" |
30 #include "content/browser/loader/resource_request_info_impl.h" | 30 #include "content/browser/loader/resource_request_info_impl.h" |
31 #include "content/common/resource_messages.h" | 31 #include "content/common/resource_messages.h" |
32 #include "content/common/resource_request.h" | 32 #include "content/common/resource_request.h" |
33 #include "content/public/browser/resource_context.h" | 33 #include "content/public/browser/resource_context.h" |
34 #include "content/public/browser/resource_request_info.h" | 34 #include "content/public/browser/resource_request_info.h" |
35 #include "content/public/common/content_features.h" | 35 #include "content/public/common/content_features.h" |
36 #include "content/public/common/process_type.h" | |
37 #include "content/public/common/resource_type.h" | 36 #include "content/public/common/resource_type.h" |
38 #include "content/public/test/mock_resource_context.h" | 37 #include "content/public/test/mock_resource_context.h" |
39 #include "content/public/test/test_browser_thread_bundle.h" | 38 #include "content/public/test/test_browser_thread_bundle.h" |
40 #include "ipc/ipc_message.h" | 39 #include "ipc/ipc_message.h" |
41 #include "ipc/ipc_message_macros.h" | 40 #include "ipc/ipc_message_macros.h" |
42 #include "net/http/http_response_headers.h" | 41 #include "net/http/http_response_headers.h" |
43 #include "net/http/http_util.h" | 42 #include "net/http/http_util.h" |
44 #include "net/ssl/client_cert_store.h" | 43 #include "net/ssl/client_cert_store.h" |
45 #include "net/url_request/url_request.h" | 44 #include "net/url_request/url_request.h" |
46 #include "net/url_request/url_request_context.h" | 45 #include "net/url_request/url_request_context.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
85 size_t response_data_size_; | 84 size_t response_data_size_; |
86 }; | 85 }; |
87 | 86 |
88 // A subclass of ResourceMessageFilter that records IPC messages that are sent. | 87 // A subclass of ResourceMessageFilter that records IPC messages that are sent. |
89 class RecordingResourceMessageFilter : public ResourceMessageFilter { | 88 class RecordingResourceMessageFilter : public ResourceMessageFilter { |
90 public: | 89 public: |
91 RecordingResourceMessageFilter(ResourceContext* resource_context, | 90 RecordingResourceMessageFilter(ResourceContext* resource_context, |
92 net::URLRequestContext* request_context) | 91 net::URLRequestContext* request_context) |
93 : ResourceMessageFilter( | 92 : ResourceMessageFilter( |
94 0, | 93 0, |
95 PROCESS_TYPE_RENDERER, | |
96 nullptr, | 94 nullptr, |
97 nullptr, | 95 nullptr, |
98 nullptr, | 96 nullptr, |
99 nullptr, | 97 nullptr, |
100 base::Bind(&RecordingResourceMessageFilter::GetContexts, | 98 base::Bind(&RecordingResourceMessageFilter::GetContexts, |
101 base::Unretained(this))), | 99 base::Unretained(this))), |
102 resource_context_(resource_context), | 100 resource_context_(resource_context), |
103 request_context_(request_context) { | 101 request_context_(request_context) { |
102 OnFilterAdded(nullptr); | |
kinuko
2016/11/18 01:29:21
Needing to OnFilterAdded even with nullptr in unit
horo
2016/11/18 02:02:51
Done.
| |
104 set_peer_process_for_testing(base::Process::Current()); | 103 set_peer_process_for_testing(base::Process::Current()); |
105 } | 104 } |
106 | 105 |
107 const std::vector<std::unique_ptr<IPC::Message>>& messages() const { | 106 const std::vector<std::unique_ptr<IPC::Message>>& messages() const { |
108 return messages_; | 107 return messages_; |
109 } | 108 } |
110 | 109 |
111 // IPC::Sender implementation: | 110 // IPC::Sender implementation: |
112 bool Send(IPC::Message* message) override { | 111 bool Send(IPC::Message* message) override { |
113 // Unpickle the base::SharedMemoryHandle to avoid warnings about | 112 // Unpickle the base::SharedMemoryHandle to avoid warnings about |
(...skipping 14 matching lines...) Expand all Loading... | |
128 net::URLRequestContext** request_context) { | 127 net::URLRequestContext** request_context) { |
129 *resource_context = resource_context_; | 128 *resource_context = resource_context_; |
130 *request_context = request_context_; | 129 *request_context = request_context_; |
131 } | 130 } |
132 | 131 |
133 ResourceContext* const resource_context_; | 132 ResourceContext* const resource_context_; |
134 net::URLRequestContext* const request_context_; | 133 net::URLRequestContext* const request_context_; |
135 std::vector<std::unique_ptr<IPC::Message>> messages_; | 134 std::vector<std::unique_ptr<IPC::Message>> messages_; |
136 }; | 135 }; |
137 | 136 |
137 } // namespace | |
138 | |
138 class AsyncResourceHandlerTest : public ::testing::Test, | 139 class AsyncResourceHandlerTest : public ::testing::Test, |
139 public ResourceLoaderDelegate { | 140 public ResourceLoaderDelegate { |
140 protected: | 141 protected: |
141 AsyncResourceHandlerTest() | 142 AsyncResourceHandlerTest() |
142 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), context_(true) {} | 143 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), context_(true) {} |
143 | 144 |
144 void TearDown() override { | 145 void TearDown() override { |
145 if (filter_) | 146 if (filter_) |
146 filter_->OnChannelClosing(); | 147 filter_->OnChannelClosing(); |
147 // Prevent memory leaks. | 148 // Prevent memory leaks. |
148 filter_ = nullptr; | 149 filter_ = nullptr; |
149 rdh_.Shutdown(); | 150 rdh_.Shutdown(); |
150 base::RunLoop().RunUntilIdle(); | 151 base::RunLoop().RunUntilIdle(); |
151 } | 152 } |
152 | 153 |
153 void CreateRequestWithResponseDataSize(size_t response_data_size) { | 154 void CreateRequestWithResponseDataSize(size_t response_data_size) { |
154 test_job_factory_.SetProtocolHandler( | 155 test_job_factory_.SetProtocolHandler( |
155 "test", base::MakeUnique<TestProtocolHandler>(response_data_size)); | 156 "test", base::MakeUnique<TestProtocolHandler>(response_data_size)); |
156 context_.set_job_factory(&test_job_factory_); | 157 context_.set_job_factory(&test_job_factory_); |
157 context_.Init(); | 158 context_.Init(); |
158 std::unique_ptr<net::URLRequest> request = context_.CreateRequest( | 159 std::unique_ptr<net::URLRequest> request = context_.CreateRequest( |
159 GURL("test:test"), net::DEFAULT_PRIORITY, nullptr); | 160 GURL("test:test"), net::DEFAULT_PRIORITY, nullptr); |
160 resource_context_ = base::MakeUnique<MockResourceContext>(&context_); | 161 resource_context_ = base::MakeUnique<MockResourceContext>(&context_); |
161 filter_ = | 162 filter_ = |
162 new RecordingResourceMessageFilter(resource_context_.get(), &context_); | 163 new RecordingResourceMessageFilter(resource_context_.get(), &context_); |
163 ResourceRequestInfoImpl* info = new ResourceRequestInfoImpl( | 164 ResourceRequestInfoImpl* info = new ResourceRequestInfoImpl( |
164 PROCESS_TYPE_RENDERER, // process_type | 165 filter_->requester_info(), |
165 0, // child_id | |
166 0, // route_id | 166 0, // route_id |
167 -1, // frame_tree_node_id | 167 -1, // frame_tree_node_id |
168 0, // origin_pid | 168 0, // origin_pid |
169 0, // request_id | 169 0, // request_id |
170 0, // render_frame_id | 170 0, // render_frame_id |
171 false, // is_main_frame | 171 false, // is_main_frame |
172 false, // parent_is_main_frame | 172 false, // parent_is_main_frame |
173 RESOURCE_TYPE_IMAGE, // resource_type | 173 RESOURCE_TYPE_IMAGE, // resource_type |
174 ui::PAGE_TRANSITION_LINK, // transition_type | 174 ui::PAGE_TRANSITION_LINK, // transition_type |
175 false, // should_replace_current_entry | 175 false, // should_replace_current_entry |
176 false, // is_download | 176 false, // is_download |
177 false, // is_stream | 177 false, // is_stream |
178 false, // allow_download | 178 false, // allow_download |
179 false, // has_user_gesture | 179 false, // has_user_gesture |
180 false, // enable load timing | 180 false, // enable load timing |
181 false, // enable upload progress | 181 false, // enable upload progress |
182 false, // do_not_prompt_for_login | 182 false, // do_not_prompt_for_login |
183 blink::WebReferrerPolicyDefault, // referrer_policy | 183 blink::WebReferrerPolicyDefault, // referrer_policy |
184 blink::WebPageVisibilityStateVisible, // visibility_state | 184 blink::WebPageVisibilityStateVisible, // visibility_state |
185 resource_context_.get(), // context | 185 resource_context_.get(), // context |
186 filter_->GetWeakPtr(), // filter | |
187 false, // report_raw_headers | 186 false, // report_raw_headers |
188 true, // is_async | 187 true, // is_async |
189 false, // is_using_lofi | 188 false, // is_using_lofi |
190 std::string(), // original_headers | 189 std::string(), // original_headers |
191 nullptr, // body | 190 nullptr, // body |
192 false); // initiated_in_secure_context | 191 false); // initiated_in_secure_context |
193 info->AssociateWithRequest(request.get()); | 192 info->AssociateWithRequest(request.get()); |
194 std::unique_ptr<AsyncResourceHandler> handler = | 193 std::unique_ptr<AsyncResourceHandler> handler = |
195 base::MakeUnique<AsyncResourceHandler>(request.get(), &rdh_); | 194 base::MakeUnique<AsyncResourceHandler>(request.get(), &rdh_); |
196 loader_ = base::MakeUnique<ResourceLoader>( | 195 loader_ = base::MakeUnique<ResourceLoader>( |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
298 | 297 |
299 ASSERT_EQ(ResourceMsg_DataReceived::ID, messages[3]->type()); | 298 ASSERT_EQ(ResourceMsg_DataReceived::ID, messages[3]->type()); |
300 ResourceMsg_DataReceived::Read(messages[3].get(), ¶ms); | 299 ResourceMsg_DataReceived::Read(messages[3].get(), ¶ms); |
301 | 300 |
302 encoded_data_length = std::get<3>(params); | 301 encoded_data_length = std::get<3>(params); |
303 EXPECT_EQ(32768, encoded_data_length); | 302 EXPECT_EQ(32768, encoded_data_length); |
304 encoded_body_length = std::get<4>(params); | 303 encoded_body_length = std::get<4>(params); |
305 EXPECT_EQ(32768, encoded_body_length); | 304 EXPECT_EQ(32768, encoded_body_length); |
306 } | 305 } |
307 | 306 |
308 } // namespace | |
309 | |
310 } // namespace content | 307 } // namespace content |
OLD | NEW |