diff options
-rw-r--r-- | chrome/renderer/extensions/extension_localization_peer.cc | 33 | ||||
-rw-r--r-- | chrome/renderer/extensions/extension_localization_peer.h | 8 | ||||
-rw-r--r-- | chrome/renderer/extensions/extension_localization_peer_unittest.cc | 79 | ||||
-rw-r--r-- | chrome/renderer/security_filter_peer.cc | 65 | ||||
-rw-r--r-- | chrome/renderer/security_filter_peer.h | 17 | ||||
-rw-r--r-- | content/child/resource_dispatcher_unittest.cc | 180 | ||||
-rw-r--r-- | content/child/web_url_loader_impl.cc | 51 | ||||
-rw-r--r-- | content/child/web_url_loader_impl_unittest.cc | 24 | ||||
-rw-r--r-- | content/public/child/request_peer.h | 20 |
9 files changed, 223 insertions, 254 deletions
diff --git a/chrome/renderer/extensions/extension_localization_peer.cc b/chrome/renderer/extensions/extension_localization_peer.cc index cafbf58..779fcba 100644 --- a/chrome/renderer/extensions/extension_localization_peer.cc +++ b/chrome/renderer/extensions/extension_localization_peer.cc @@ -95,34 +95,21 @@ void ExtensionLocalizationPeer::OnCompletedRequest( // Give sub-classes a chance at altering the data. if (error_code != net::OK) { // We failed to load the resource. - original_peer_->OnReceivedCompletedResponse( - response_info_, nullptr, net::ERR_ABORTED, false, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + original_peer_->OnCompletedRequest(net::ERR_ABORTED, false, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); return; } ReplaceMessages(); - scoped_ptr<StringData> data_to_pass(data_.empty() ? nullptr - : new StringData(data_)); - original_peer_->OnReceivedCompletedResponse( - response_info_, std::move(data_to_pass), error_code, - was_ignored_by_handler, stale_copy_in_cache, security_info, - completion_time, total_transfer_size); -} - -void ExtensionLocalizationPeer::OnReceivedCompletedResponse( - const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - original_peer_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + if (!data_.empty()) + original_peer_->OnReceivedData(make_scoped_ptr(new StringData(data_))); + original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); } void ExtensionLocalizationPeer::ReplaceMessages() { diff --git a/chrome/renderer/extensions/extension_localization_peer.h b/chrome/renderer/extensions/extension_localization_peer.h index e45413e..5ac7f7e 100644 --- a/chrome/renderer/extensions/extension_localization_peer.h +++ b/chrome/renderer/extensions/extension_localization_peer.h @@ -47,14 +47,6 @@ class ExtensionLocalizationPeer : public content::RequestPeer { const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; private: friend class ExtensionLocalizationPeerTest; diff --git a/chrome/renderer/extensions/extension_localization_peer_unittest.cc b/chrome/renderer/extensions/extension_localization_peer_unittest.cc index 67b1104..f0587a0 100644 --- a/chrome/renderer/extensions/extension_localization_peer_unittest.cc +++ b/chrome/renderer/extensions/extension_localization_peer_unittest.cc @@ -83,37 +83,6 @@ class MockRequestPeer : public content::RequestPeer { const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size)); - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<RequestPeer::ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override { - if (data) { - OnReceivedCompletedResponseInternal( - info, data->payload(), data->length(), data->encoded_length(), - error_code, was_ignored_by_handler, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); - } else { - OnReceivedCompletedResponseInternal(info, nullptr, 0, 0, error_code, - was_ignored_by_handler, - stale_copy_in_cache, security_info, - completion_time, total_transfer_size); - } - } - MOCK_METHOD10(OnReceivedCompletedResponseInternal, - void(const content::ResourceResponseInfo& info, - const char* data, - int data_length, - int encoded_data_length, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size)); private: DISALLOW_COPY_AND_ASSIGN(MockRequestPeer); @@ -181,9 +150,10 @@ MATCHER_P(IsURLRequestEqual, status, "") { return arg.status() == status; } TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestBadURLRequestStatus) { SetUpExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); - EXPECT_CALL(*original_peer_, OnReceivedCompletedResponseInternal( - _, nullptr, 0, 0, net::ERR_ABORTED, false, - false, "", base::TimeTicks(), -1)); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); + EXPECT_CALL(*original_peer_, + OnCompletedRequest(net::ERR_ABORTED, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::ERR_FAILED, false, false, std::string(), base::TimeTicks(), -1); @@ -195,9 +165,9 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestEmptyData) { EXPECT_CALL(*original_peer_, OnReceivedDataInternal(_, _, _)).Times(0); EXPECT_CALL(*sender_, Send(_)).Times(0); - EXPECT_CALL(*original_peer_, OnReceivedCompletedResponseInternal( - _, nullptr, 0, 0, net::OK, false, false, "", - base::TimeTicks(), -1)); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), base::TimeTicks(), -1); @@ -211,10 +181,12 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { EXPECT_CALL(*sender_, Send(_)); std::string data = GetData(); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(1); EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(data.c_str()), data.size(), -1, net::OK, false, - false, "", base::TimeTicks(), -1)) + OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1)) + .Times(1); + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)) .Times(1); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), @@ -223,10 +195,12 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { // Test if Send gets called again (it shouldn't be) when first call returned // an empty dictionary. SetUpExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(1); EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(data.c_str()), data.size(), -1, net::OK, false, - false, "", base::TimeTicks(), -1)) + OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1)) + .Times(1); + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)) .Times(1); SetData("some text"); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), @@ -249,10 +223,12 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestWithCatalogs) { // __MSG_text__ gets replaced with "new text". std::string data("some new text"); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(data.c_str()), data.size(), -1, net::OK, false, - false, std::string(), base::TimeTicks(), -1)); + OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1)); + + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), base::TimeTicks(), -1); @@ -273,10 +249,13 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestReplaceMessagesFails) { // We already have messages in memory, Send will be skipped. EXPECT_CALL(*sender_, Send(_)).Times(0); - EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(message.c_str()), message.size(), -1, net::OK, false, - false, "", base::TimeTicks(), -1)); + // __MSG_missing_message__ is missing, so message stays the same. + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); + EXPECT_CALL(*original_peer_, OnReceivedDataInternal(StrEq(message.c_str()), + message.length(), -1)); + + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), base::TimeTicks(), -1); diff --git a/chrome/renderer/security_filter_peer.cc b/chrome/renderer/security_filter_peer.cc index 8a5b3d8..a161dcb 100644 --- a/chrome/renderer/security_filter_peer.cc +++ b/chrome/renderer/security_filter_peer.cc @@ -137,33 +137,21 @@ void BufferedPeer::OnCompletedRequest(int error_code, // Give sub-classes a chance at altering the data. if (error_code != net::OK || !DataReady()) { // Pretend we failed to load the resource. - original_peer_->OnReceivedCompletedResponse( - response_info_, nullptr, net::ERR_ABORTED, false, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + original_peer_->OnCompletedRequest(net::ERR_ABORTED, false, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); return; } - scoped_ptr<content::FixedReceivedData> data_to_pass( - data_.empty() ? nullptr : new content::FixedReceivedData( - data_.data(), data_.size(), -1)); - original_peer_->OnReceivedCompletedResponse( - response_info_, std::move(data_to_pass), error_code, - was_ignored_by_handler, stale_copy_in_cache, security_info, - completion_time, total_transfer_size); -} - -void BufferedPeer::OnReceivedCompletedResponse( - const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - original_peer_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + if (!data_.empty()) { + original_peer_->OnReceivedData(make_scoped_ptr( + new content::FixedReceivedData(data_.data(), data_.size(), -1))); + } + original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); } //////////////////////////////////////////////////////////////////////////////// @@ -197,25 +185,12 @@ void ReplaceContentPeer::OnCompletedRequest( ProcessResponseInfo(info, &info, mime_type_); info.security_info = security_info; info.content_length = static_cast<int>(data_.size()); - - scoped_ptr<content::FixedReceivedData> data_to_pass( - data_.empty() ? nullptr : new content::FixedReceivedData( - data_.data(), data_.size(), -1)); - original_peer_->OnReceivedCompletedResponse( - response_info_, std::move(data_to_pass), net::OK, false, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); -} - -void ReplaceContentPeer::OnReceivedCompletedResponse( - const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - original_peer_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(info); + if (!data_.empty()) { + original_peer_->OnReceivedData(make_scoped_ptr( + new content::FixedReceivedData(data_.data(), data_.size(), -1))); + } + original_peer_->OnCompletedRequest(net::OK, false, stale_copy_in_cache, + security_info, completion_time, + total_transfer_size); } diff --git a/chrome/renderer/security_filter_peer.h b/chrome/renderer/security_filter_peer.h index e566b94..5eaacaf9 100644 --- a/chrome/renderer/security_filter_peer.h +++ b/chrome/renderer/security_filter_peer.h @@ -39,6 +39,7 @@ class SecurityFilterPeer : public content::RequestPeer { bool OnReceivedRedirect(const net::RedirectInfo& redirect_info, const content::ResourceResponseInfo& info) override; void OnDownloadedData(int len, int encoded_data_length) override {} + protected: explicit SecurityFilterPeer(scoped_ptr<content::RequestPeer> peer); @@ -65,14 +66,6 @@ class BufferedPeer : public SecurityFilterPeer { const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; protected: // Invoked when the entire request has been processed before the data is sent @@ -112,14 +105,6 @@ class ReplaceContentPeer : public SecurityFilterPeer { const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; private: content::ResourceResponseInfo response_info_; diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc index c026295..c599773 100644 --- a/content/child/resource_dispatcher_unittest.cc +++ b/content/child/resource_dispatcher_unittest.cc @@ -22,7 +22,9 @@ #include "content/common/appcache_interfaces.h" #include "content/common/resource_messages.h" #include "content/common/service_worker/service_worker_types.h" +#include "content/public/child/fixed_received_data.h" #include "content/public/child/request_peer.h" +#include "content/public/child/resource_dispatcher_delegate.h" #include "content/public/common/resource_response.h" #include "net/base/net_errors.h" #include "net/http/http_response_headers.h" @@ -52,6 +54,7 @@ class TestRequestPeer : public RequestPeer { bool OnReceivedRedirect(const net::RedirectInfo& redirect_info, const ResourceResponseInfo& info) override { + EXPECT_FALSE(context_->cancelled); ++context_->seen_redirects; if (context_->defer_on_redirect) dispatcher_->SetDefersLoading(context_->request_id, true); @@ -59,18 +62,24 @@ class TestRequestPeer : public RequestPeer { } void OnReceivedResponse(const ResourceResponseInfo& info) override { + EXPECT_FALSE(context_->cancelled); EXPECT_FALSE(context_->received_response); context_->received_response = true; - if (context_->cancel_on_receive_response) + if (context_->cancel_on_receive_response) { dispatcher_->Cancel(context_->request_id); + context_->cancelled = true; + } } void OnDownloadedData(int len, int encoded_data_length) override { + EXPECT_FALSE(context_->cancelled); context_->total_downloaded_data_length += len; context_->total_encoded_data_length += encoded_data_length; } void OnReceivedData(scoped_ptr<ReceivedData> data) override { + if (context_->cancelled) + return; EXPECT_TRUE(context_->received_response); EXPECT_FALSE(context_->complete); context_->data.append(data->payload(), data->length()); @@ -83,28 +92,13 @@ class TestRequestPeer : public RequestPeer { const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override { + if (context_->cancelled) + return; EXPECT_TRUE(context_->received_response); EXPECT_FALSE(context_->complete); context_->complete = true; } - void OnReceivedCompletedResponse(const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override { - OnReceivedResponse(info); - if (context_->cancel_on_receive_response) - return; - if (data) - OnReceivedData(std::move(data)); - OnCompletedRequest(error_code, was_ignored_by_handler, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); - } - struct Context { // True if should follow redirects, false if should cancel them. bool follow_redirects = true; @@ -127,6 +121,7 @@ class TestRequestPeer : public RequestPeer { int total_downloaded_data_length = 0; bool complete = false; + bool cancelled = false; int request_id = -1; }; @@ -467,6 +462,155 @@ TEST_F(ResourceDispatcherTest, CancelDuringCallback) { EXPECT_FALSE(peer_context.complete); } +class TestResourceDispatcherDelegate : public ResourceDispatcherDelegate { + public: + TestResourceDispatcherDelegate() {} + ~TestResourceDispatcherDelegate() override {} + + scoped_ptr<RequestPeer> OnRequestComplete( + scoped_ptr<RequestPeer> current_peer, + ResourceType resource_type, + int error_code) override { + return current_peer; + } + + scoped_ptr<RequestPeer> OnReceivedResponse( + scoped_ptr<RequestPeer> current_peer, + const std::string& mime_type, + const GURL& url) override { + return make_scoped_ptr(new WrapperPeer(std::move(current_peer))); + } + + class WrapperPeer : public RequestPeer { + public: + explicit WrapperPeer(scoped_ptr<RequestPeer> original_peer) + : original_peer_(std::move(original_peer)) {} + + void OnUploadProgress(uint64_t position, uint64_t size) override {} + + bool OnReceivedRedirect(const net::RedirectInfo& redirect_info, + const ResourceResponseInfo& info) override { + return false; + } + + void OnReceivedResponse(const ResourceResponseInfo& info) override { + response_info_ = info; + } + + void OnDownloadedData(int len, int encoded_data_length) override {} + + void OnReceivedData(scoped_ptr<ReceivedData> data) override { + data_.append(data->payload(), data->length()); + } + + void OnCompletedRequest(int error_code, + bool was_ignored_by_handler, + bool stale_copy_in_cache, + const std::string& security_info, + const base::TimeTicks& completion_time, + int64_t total_transfer_size) override { + original_peer_->OnReceivedResponse(response_info_); + if (!data_.empty()) { + original_peer_->OnReceivedData(make_scoped_ptr( + new FixedReceivedData(data_.data(), data_.size(), -1))); + } + original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); + } + + private: + scoped_ptr<RequestPeer> original_peer_; + ResourceResponseInfo response_info_; + std::string data_; + + DISALLOW_COPY_AND_ASSIGN(WrapperPeer); + }; + + private: + DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherDelegate); +}; + +TEST_F(ResourceDispatcherTest, DelegateTest) { + scoped_ptr<RequestInfo> request_info(CreateRequestInfo(false)); + TestRequestPeer::Context peer_context; + StartAsync(*request_info.get(), nullptr, &peer_context); + + // Set the delegate that inserts a new peer in OnReceivedResponse. + TestResourceDispatcherDelegate delegate; + dispatcher()->set_delegate(&delegate); + + // Run a simple round-trip. + const size_t kFirstReceiveSize = 2; + ASSERT_LT(kFirstReceiveSize, strlen(kTestPageContents)); + + int id = ConsumeRequestResource(); + EXPECT_EQ(0u, queued_messages()); + + // The wrapper eats all messages until RequestComplete message is sent. + NotifyReceivedResponse(id); + NotifySetDataBuffer(id, strlen(kTestPageContents)); + NotifyDataReceived(id, std::string(kTestPageContents, kFirstReceiveSize)); + ConsumeDataReceived_ACK(id); + NotifyDataReceived(id, kTestPageContents + kFirstReceiveSize); + ConsumeDataReceived_ACK(id); + + EXPECT_FALSE(peer_context.received_response); + EXPECT_EQ(0u, queued_messages()); + + // This lets the wrapper peer pass all the messages to the original + // peer at once. + NotifyRequestComplete(id, strlen(kTestPageContents)); + + EXPECT_TRUE(peer_context.received_response); + EXPECT_EQ(kTestPageContents, peer_context.data); + EXPECT_TRUE(peer_context.complete); + EXPECT_EQ(0u, queued_messages()); +} + +TEST_F(ResourceDispatcherTest, CancelDuringCallbackWithWrapperPeer) { + scoped_ptr<RequestInfo> request_info(CreateRequestInfo(false)); + TestRequestPeer::Context peer_context; + StartAsync(*request_info.get(), nullptr, &peer_context); + peer_context.cancel_on_receive_response = true; + + // Set the delegate that inserts a new peer in OnReceivedResponse. + TestResourceDispatcherDelegate delegate; + dispatcher()->set_delegate(&delegate); + + int id = ConsumeRequestResource(); + EXPECT_EQ(0u, queued_messages()); + + // The wrapper eats all messages until RequestComplete message is sent. + NotifyReceivedResponse(id); + NotifySetDataBuffer(id, strlen(kTestPageContents)); + NotifyDataReceived(id, kTestPageContents); + ConsumeDataReceived_ACK(id); + + EXPECT_FALSE(peer_context.received_response); + EXPECT_EQ(0u, queued_messages()); + + // This lets the wrapper peer pass all the messages to the original + // peer at once, but the original peer cancels right after it receives + // the response. (This will remove pending request info from + // ResourceDispatcher while the wrapper peer is still running + // OnCompletedRequest, but it should not lead to crashes.) + NotifyRequestComplete(id, strlen(kTestPageContents)); + + EXPECT_TRUE(peer_context.received_response); + // Request should have been cancelled. + ConsumeCancelRequest(id); + EXPECT_TRUE(peer_context.cancelled); + + // Any future messages related to the request should be ignored. + NotifyDataReceived(id, kTestPageContents); + NotifyRequestComplete(id, strlen(kTestPageContents)); + + EXPECT_EQ(0u, queued_messages()); + EXPECT_EQ("", peer_context.data); + EXPECT_FALSE(peer_context.complete); +} + // Checks that redirects work as expected. TEST_F(ResourceDispatcherTest, Redirect) { scoped_ptr<RequestInfo> request_info(CreateRequestInfo(false)); diff --git a/content/child/web_url_loader_impl.cc b/content/child/web_url_loader_impl.cc index 8665166..d380c1f 100644 --- a/content/child/web_url_loader_impl.cc +++ b/content/child/web_url_loader_impl.cc @@ -316,14 +316,6 @@ class WebURLLoaderImpl::Context : public base::RefCounted<Context> { const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size); - void OnReceivedCompletedResponse(const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size); private: friend class base::RefCounted<Context>; @@ -385,16 +377,6 @@ class WebURLLoaderImpl::RequestPeerImpl : public RequestPeer { const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - // TODO(kinuko): Deprecate this method. (crbug.com/507170) - void OnReceivedCompletedResponse(const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; - private: scoped_refptr<Context> context_; DISALLOW_COPY_AND_ASSIGN(RequestPeerImpl); @@ -798,26 +780,9 @@ void WebURLLoaderImpl::Context::OnCompletedRequest( } } -void WebURLLoaderImpl::Context::OnReceivedCompletedResponse( - const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - OnReceivedResponse(info); - if (data) - OnReceivedData(std::move(data)); - OnCompletedRequest(error_code, was_ignored_by_handler, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); -} - WebURLLoaderImpl::Context::~Context() { // We must be already cancelled at this point. - // TODO(kinuko): Replace this with DCHECK once we make sure this is safe. - CHECK_LT(request_id_, 0); + DCHECK_LT(request_id_, 0); } void WebURLLoaderImpl::Context::CancelBodyStreaming() { @@ -962,20 +927,6 @@ void WebURLLoaderImpl::RequestPeerImpl::OnCompletedRequest( completion_time, total_transfer_size); } -void WebURLLoaderImpl::RequestPeerImpl::OnReceivedCompletedResponse( - const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - context_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); -} - // WebURLLoaderImpl ----------------------------------------------------------- WebURLLoaderImpl::WebURLLoaderImpl( diff --git a/content/child/web_url_loader_impl_unittest.cc b/content/child/web_url_loader_impl_unittest.cc index 242017c..da22c38 100644 --- a/content/child/web_url_loader_impl_unittest.cc +++ b/content/child/web_url_loader_impl_unittest.cc @@ -316,23 +316,6 @@ class WebURLLoaderImplTest : public testing::Test { EXPECT_EQ("", client()->error().domain.utf8()); } - void DoReceiveCompletedResponse() { - EXPECT_FALSE(client()->did_receive_response()); - EXPECT_EQ("", client()->received_data()); - EXPECT_FALSE(client()->did_finish()); - - peer()->OnReceivedCompletedResponse( - content::ResourceResponseInfo(), - make_scoped_ptr(new FixedReceivedData(kTestData, strlen(kTestData), - strlen(kTestData))), - net::OK, false, false, "", base::TimeTicks(), strlen(kTestData)); - - EXPECT_TRUE(client()->did_receive_response()); - EXPECT_EQ(kTestData, client()->received_data()); - EXPECT_EQ(net::OK, client()->error().reason); - EXPECT_EQ("", client()->error().domain.utf8()); - } - void DoFailRequest() { EXPECT_FALSE(client()->did_finish()); peer()->OnCompletedRequest(net::ERR_FAILED, false, false, "", @@ -417,13 +400,6 @@ TEST_F(WebURLLoaderImplTest, Failure) { EXPECT_FALSE(dispatcher()->canceled()); } -TEST_F(WebURLLoaderImplTest, ReceiveCompletedResponse) { - DoStartAsyncRequest(); - DoReceiveCompletedResponse(); - EXPECT_FALSE(dispatcher()->canceled()); - EXPECT_EQ(kTestData, client()->received_data()); -} - // The client may delete the WebURLLoader during any callback from the loader. // These tests make sure that doesn't result in a crash. TEST_F(WebURLLoaderImplTest, DeleteOnReceiveRedirect) { diff --git a/content/public/child/request_peer.h b/content/public/child/request_peer.h index 7ca6649..cda0c71 100644 --- a/content/public/child/request_peer.h +++ b/content/public/child/request_peer.h @@ -97,26 +97,6 @@ class CONTENT_EXPORT RequestPeer { const base::TimeTicks& completion_time, int64_t total_transfer_size) = 0; - // This is a combined notification of - // - OnReceivedResponse, - // - OnReceivedData and - // - OnCompletedRequest. - // Unlike OnReceivedData, |data| can be null. - // This method is introduced to avoid repetitive method calls which might - // lead to use-after-free issues. See https://crbug.com/485413, - // https://crbug.com/507170. - // TODO(yhirano): Fix the RequestPeer lifecycle problem and remove this - // function. - virtual void OnReceivedCompletedResponse( - const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) = 0; - virtual ~RequestPeer() {} }; |