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

Side by Side Diff: mock_http_fetcher.cc

Issue 5009009: AU: Fix potential issues with premature destruction of HTTP fetchers. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git@master
Patch Set: review comments Created 10 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « libcurl_http_fetcher.cc ('k') | multi_http_fetcher.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium OS 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 "update_engine/mock_http_fetcher.h" 5 #include "update_engine/mock_http_fetcher.h"
6 #include <algorithm> 6 #include <algorithm>
7 #include "base/logging.h" 7 #include "base/logging.h"
8 8
9 // This is a mac implementation of HttpFetcher which is useful for testing. 9 // This is a mac implementation of HttpFetcher which is useful for testing.
10 10
(...skipping 23 matching lines...) Expand all
34 SignalTransferComplete(); 34 SignalTransferComplete();
35 return timeout_source_; 35 return timeout_source_;
36 } 36 }
37 37
38 CHECK_LT(sent_size_, data_.size()); 38 CHECK_LT(sent_size_, data_.size());
39 if (!skip_delivery) { 39 if (!skip_delivery) {
40 const size_t chunk_size = min(kMockHttpFetcherChunkSize, 40 const size_t chunk_size = min(kMockHttpFetcherChunkSize,
41 data_.size() - sent_size_); 41 data_.size() - sent_size_);
42 CHECK(delegate_); 42 CHECK(delegate_);
43 delegate_->ReceivedBytes(this, &data_[sent_size_], chunk_size); 43 delegate_->ReceivedBytes(this, &data_[sent_size_], chunk_size);
44 // We may get terminated in the callback.
45 if (sent_size_ == data_.size()) {
46 LOG(INFO) << "Terminated in the ReceivedBytes callback.";
47 return timeout_source_;
48 }
44 sent_size_ += chunk_size; 49 sent_size_ += chunk_size;
45 CHECK_LE(sent_size_, data_.size()); 50 CHECK_LE(sent_size_, data_.size());
46 if (sent_size_ == data_.size()) { 51 if (sent_size_ == data_.size()) {
47 // We've sent all the data. Notify of success. 52 // We've sent all the data. Notify of success.
48 SignalTransferComplete(); 53 SignalTransferComplete();
49 } 54 }
50 } 55 }
51 56
52 if (paused_) { 57 if (paused_) {
53 // If we're paused, we should return true if timeout_source_ is set, 58 // If we're paused, we should return true if timeout_source_ is set,
(...skipping 20 matching lines...) Expand all
74 bool ret = SendData(false); 79 bool ret = SendData(false);
75 if (false == ret) { 80 if (false == ret) {
76 timeout_source_ = NULL; 81 timeout_source_ = NULL;
77 } 82 }
78 return ret; 83 return ret;
79 } 84 }
80 85
81 // If the transfer is in progress, aborts the transfer early. 86 // If the transfer is in progress, aborts the transfer early.
82 // The transfer cannot be resumed. 87 // The transfer cannot be resumed.
83 void MockHttpFetcher::TerminateTransfer() { 88 void MockHttpFetcher::TerminateTransfer() {
89 LOG(INFO) << "Terminating transfer.";
84 sent_size_ = data_.size(); 90 sent_size_ = data_.size();
85 // kill any timeout 91 // kill any timeout
86 if (timeout_source_) { 92 if (timeout_source_) {
87 g_source_remove(timout_tag_); 93 g_source_remove(timout_tag_);
88 g_source_destroy(timeout_source_); 94 g_source_destroy(timeout_source_);
89 timeout_source_ = NULL; 95 timeout_source_ = NULL;
90 } 96 }
97 delegate_->TransferTerminated(this);
91 } 98 }
92 99
93 void MockHttpFetcher::Pause() { 100 void MockHttpFetcher::Pause() {
94 CHECK(!paused_); 101 CHECK(!paused_);
95 paused_ = true; 102 paused_ = true;
96 if (timeout_source_) { 103 if (timeout_source_) {
97 g_source_remove(timout_tag_); 104 g_source_remove(timout_tag_);
98 g_source_destroy(timeout_source_); 105 g_source_destroy(timeout_source_);
99 timeout_source_ = NULL; 106 timeout_source_ = NULL;
100 } 107 }
(...skipping 16 matching lines...) Expand all
117 void MockHttpFetcher::SignalTransferComplete() { 124 void MockHttpFetcher::SignalTransferComplete() {
118 // If the transfer has been failed, the HTTP response code should be set 125 // If the transfer has been failed, the HTTP response code should be set
119 // already. 126 // already.
120 if (!fail_transfer_) { 127 if (!fail_transfer_) {
121 http_response_code_ = 200; 128 http_response_code_ = 200;
122 } 129 }
123 delegate_->TransferComplete(this, !fail_transfer_); 130 delegate_->TransferComplete(this, !fail_transfer_);
124 } 131 }
125 132
126 } // namespace chromeos_update_engine 133 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « libcurl_http_fetcher.cc ('k') | multi_http_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698