| 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); |
| 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()->clone(), |
| 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 |