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

Side by Side Diff: webkit/glue/resource_fetcher_unittest.cc

Issue 7087028: roll clang 131935:132017 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "webkit/glue/resource_fetcher.h" 5 #include "webkit/glue/resource_fetcher.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/timer.h" 9 #include "base/timer.h"
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
(...skipping 22 matching lines...) Expand all
33 public: 33 public:
34 FetcherDelegate() 34 FetcherDelegate()
35 : completed_(false), 35 : completed_(false),
36 timed_out_(false) { 36 timed_out_(false) {
37 // Start a repeating timer waiting for the download to complete. The 37 // Start a repeating timer waiting for the download to complete. The
38 // callback has to be a static function, so we hold on to our instance. 38 // callback has to be a static function, so we hold on to our instance.
39 FetcherDelegate::instance_ = this; 39 FetcherDelegate::instance_ = this;
40 StartTimer(); 40 StartTimer();
41 } 41 }
42 42
43 virtual ~FetcherDelegate() {}
44
43 ResourceFetcher::Callback* NewCallback() { 45 ResourceFetcher::Callback* NewCallback() {
44 return ::NewCallback(this, &FetcherDelegate::OnURLFetchComplete); 46 return ::NewCallback(this, &FetcherDelegate::OnURLFetchComplete);
45 } 47 }
46 48
47 virtual void OnURLFetchComplete(const WebURLResponse& response, 49 virtual void OnURLFetchComplete(const WebURLResponse& response,
48 const std::string& data) { 50 const std::string& data) {
49 response_ = response; 51 response_ = response;
50 data_ = data; 52 data_ = data;
51 completed_ = true; 53 completed_ = true;
52 timer_.Stop(); 54 timer_.Stop();
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 // When we timeout, we still call the Delegate callback but we pass in empty 168 // When we timeout, we still call the Delegate callback but we pass in empty
167 // values. 169 // values.
168 EXPECT_TRUE(delegate->completed()); 170 EXPECT_TRUE(delegate->completed());
169 EXPECT_TRUE(delegate->response().isNull()); 171 EXPECT_TRUE(delegate->response().isNull());
170 EXPECT_EQ(delegate->data(), std::string()); 172 EXPECT_EQ(delegate->data(), std::string());
171 EXPECT_FALSE(delegate->timed_out()); 173 EXPECT_FALSE(delegate->timed_out());
172 } 174 }
173 175
174 class EvilFetcherDelegate : public FetcherDelegate { 176 class EvilFetcherDelegate : public FetcherDelegate {
175 public: 177 public:
178 virtual ~EvilFetcherDelegate() {}
179
176 void SetFetcher(ResourceFetcher* fetcher) { 180 void SetFetcher(ResourceFetcher* fetcher) {
177 fetcher_.reset(fetcher); 181 fetcher_.reset(fetcher);
178 } 182 }
179 183
180 void OnURLFetchComplete(const WebURLResponse& response, 184 virtual void OnURLFetchComplete(const WebURLResponse& response,
181 const std::string& data) { 185 const std::string& data) {
182 // Destroy the ResourceFetcher here. We are testing that upon returning 186 // Destroy the ResourceFetcher here. We are testing that upon returning
183 // to the ResourceFetcher that it does not crash. 187 // to the ResourceFetcher that it does not crash.
184 fetcher_.reset(); 188 fetcher_.reset();
185 FetcherDelegate::OnURLFetchComplete(response, data); 189 FetcherDelegate::OnURLFetchComplete(response, data);
186 } 190 }
187 191
188 private: 192 private:
189 scoped_ptr<ResourceFetcher> fetcher_; 193 scoped_ptr<ResourceFetcher> fetcher_;
190 }; 194 };
191 195
192 TEST_F(ResourceFetcherTests, ResourceFetcherDeletedInCallback) { 196 TEST_F(ResourceFetcherTests, ResourceFetcherDeletedInCallback) {
193 ASSERT_TRUE(test_server_.Start()); 197 ASSERT_TRUE(test_server_.Start());
194 198
195 WebFrame* frame = test_shell_->webView()->mainFrame(); 199 WebFrame* frame = test_shell_->webView()->mainFrame();
196 200
197 // Grab a page that takes at least 1 sec to respond, but set the fetcher to 201 // Grab a page that takes at least 1 sec to respond, but set the fetcher to
198 // timeout in 0 sec. 202 // timeout in 0 sec.
199 GURL url(test_server_.GetURL("slow?1")); 203 GURL url(test_server_.GetURL("slow?1"));
200 scoped_ptr<EvilFetcherDelegate> delegate(new EvilFetcherDelegate); 204 scoped_ptr<EvilFetcherDelegate> delegate(new EvilFetcherDelegate);
201 scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcherWithTimeout( 205 scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcherWithTimeout(
202 url, frame, WebURLRequest::TargetIsMainFrame, 206 url, frame, WebURLRequest::TargetIsMainFrame,
203 0, delegate->NewCallback())); 207 0, delegate->NewCallback()));
204 delegate->SetFetcher(fetcher.release()); 208 delegate->SetFetcher(fetcher.release());
205 209
206 delegate->WaitForResponse(); 210 delegate->WaitForResponse();
207 EXPECT_FALSE(delegate->timed_out()); 211 EXPECT_FALSE(delegate->timed_out());
208 } 212 }
209 213
210 } // namespace 214 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698