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

Side by Side Diff: content/test/weburl_loader_mock_factory.cc

Issue 1743783002: Use WeakPtr and do not use pointer equality in WebURLLoaderMockFactory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Loader_URLTestHelpers
Patch Set: Rebase. Created 4 years, 9 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
« no previous file with comments | « content/test/weburl_loader_mock_factory.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/test/weburl_loader_mock_factory.h" 5 #include "content/test/weburl_loader_mock_factory.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 url_to_reponse_info_.clear(); 69 url_to_reponse_info_.clear();
70 url_to_error_info_.clear(); 70 url_to_error_info_.clear();
71 WebCache::clear(); 71 WebCache::clear();
72 } 72 }
73 73
74 void WebURLLoaderMockFactory::ServeAsynchronousRequests() { 74 void WebURLLoaderMockFactory::ServeAsynchronousRequests() {
75 // Serving a request might trigger more requests, so we cannot iterate on 75 // Serving a request might trigger more requests, so we cannot iterate on
76 // pending_loaders_ as it might get modified. 76 // pending_loaders_ as it might get modified.
77 while (!pending_loaders_.empty()) { 77 while (!pending_loaders_.empty()) {
78 LoaderToRequestMap::iterator iter = pending_loaders_.begin(); 78 LoaderToRequestMap::iterator iter = pending_loaders_.begin();
79 WebURLLoaderMock* loader = iter->first; 79 base::WeakPtr<WebURLLoaderMock> loader(iter->first->GetWeakPtr());
80 const WebURLRequest& request = iter->second; 80 const WebURLRequest request = iter->second;
81 pending_loaders_.erase(loader.get());
82
81 WebURLResponse response; 83 WebURLResponse response;
82 WebURLError error; 84 WebURLError error;
83 WebData data; 85 WebData data;
84 LoadRequest(request, &response, &error, &data); 86 LoadRequest(request, &response, &error, &data);
85 // Follow any redirects while the loader is still active. 87 // Follow any redirects while the loader is still active.
86 while (response.httpStatusCode() >= 300 && 88 while (response.httpStatusCode() >= 300 &&
87 response.httpStatusCode() < 400) { 89 response.httpStatusCode() < 400) {
88 WebURLRequest newRequest = loader->ServeRedirect(request, response); 90 WebURLRequest newRequest = loader->ServeRedirect(request, response);
89 if (!IsPending(loader) || loader->isDeferred()) 91 if (!loader || loader->is_cancelled() || loader->is_deferred())
90 break; 92 break;
91 LoadRequest(newRequest, &response, &error, &data); 93 LoadRequest(newRequest, &response, &error, &data);
92 } 94 }
93 // Serve the request if the loader is still active. 95 // Serve the request if the loader is still active.
94 if (IsPending(loader) && !loader->isDeferred()) 96 if (loader && !loader->is_cancelled() && !loader->is_deferred())
95 loader->ServeAsynchronousRequest(delegate_, response, data, error); 97 loader->ServeAsynchronousRequest(delegate_, response, data, error);
96 // The loader might have already been removed.
97 pending_loaders_.erase(loader);
98 } 98 }
99 base::RunLoop().RunUntilIdle(); 99 base::RunLoop().RunUntilIdle();
100 } 100 }
101 101
102 bool WebURLLoaderMockFactory::IsMockedURL(const blink::WebURL& url) { 102 bool WebURLLoaderMockFactory::IsMockedURL(const blink::WebURL& url) {
103 return url_to_reponse_info_.find(url) != url_to_reponse_info_.end(); 103 return url_to_reponse_info_.find(url) != url_to_reponse_info_.end();
104 } 104 }
105 105
106 void WebURLLoaderMockFactory::CancelLoad(WebURLLoaderMock* loader) { 106 void WebURLLoaderMockFactory::CancelLoad(WebURLLoaderMock* loader) {
107 pending_loaders_.erase(loader); 107 pending_loaders_.erase(loader);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 } 145 }
146 146
147 if (!error->reason && !ReadFile(iter->second.file_path, data)) { 147 if (!error->reason && !ReadFile(iter->second.file_path, data)) {
148 NOTREACHED(); 148 NOTREACHED();
149 return; 149 return;
150 } 150 }
151 151
152 *response = iter->second.response; 152 *response = iter->second.response;
153 } 153 }
154 154
155 bool WebURLLoaderMockFactory::IsPending(WebURLLoaderMock* loader) {
156 LoaderToRequestMap::iterator iter = pending_loaders_.find(loader);
157 return iter != pending_loaders_.end();
158 }
159
160 // static 155 // static
161 bool WebURLLoaderMockFactory::ReadFile(const base::FilePath& file_path, 156 bool WebURLLoaderMockFactory::ReadFile(const base::FilePath& file_path,
162 WebData* data) { 157 WebData* data) {
163 // If the path is empty then we return an empty file so tests can simulate 158 // If the path is empty then we return an empty file so tests can simulate
164 // requests without needing to actually load files. 159 // requests without needing to actually load files.
165 if (file_path.empty()) 160 if (file_path.empty())
166 return true; 161 return true;
167 162
168 int64_t file_size = 0; 163 int64_t file_size = 0;
169 if (!base::GetFileSize(file_path, &file_size)) 164 if (!base::GetFileSize(file_path, &file_size))
170 return false; 165 return false;
171 166
172 int size = static_cast<int>(file_size); 167 int size = static_cast<int>(file_size);
173 scoped_ptr<char[]> buffer(new char[size]); 168 scoped_ptr<char[]> buffer(new char[size]);
174 data->reset(); 169 data->reset();
175 int read_count = base::ReadFile(file_path, buffer.get(), size); 170 int read_count = base::ReadFile(file_path, buffer.get(), size);
176 if (read_count == -1) 171 if (read_count == -1)
177 return false; 172 return false;
178 DCHECK(read_count == size); 173 DCHECK(read_count == size);
179 data->assign(buffer.get(), size); 174 data->assign(buffer.get(), size);
180 175
181 return true; 176 return true;
182 } 177 }
OLDNEW
« no previous file with comments | « content/test/weburl_loader_mock_factory.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698