Index: webkit/glue/resource_fetcher_unittest.cc |
=================================================================== |
--- webkit/glue/resource_fetcher_unittest.cc (revision 195684) |
+++ webkit/glue/resource_fetcher_unittest.cc (working copy) |
@@ -1,217 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "webkit/glue/resource_fetcher.h" |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/message_loop.h" |
-#include "base/timer.h" |
-#include "third_party/WebKit/Source/Platform/chromium/public/WebURLResponse.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
-#include "webkit/glue/unittest_test_server.h" |
-#include "webkit/tools/test_shell/simple_resource_loader_bridge.h" |
-#include "webkit/tools/test_shell/test_shell_test.h" |
- |
-using WebKit::WebFrame; |
-using WebKit::WebURLRequest; |
-using WebKit::WebURLResponse; |
-using webkit_glue::ResourceFetcher; |
-using webkit_glue::ResourceFetcherWithTimeout; |
- |
-namespace { |
- |
-class ResourceFetcherTests : public TestShellTest { |
- protected: |
- UnittestTestServer test_server_; |
-}; |
- |
-static const int kMaxWaitTimeMs = 5000; |
- |
-class FetcherDelegate { |
- public: |
- FetcherDelegate() |
- : completed_(false), |
- timed_out_(false) { |
- // Start a repeating timer waiting for the download to complete. The |
- // callback has to be a static function, so we hold on to our instance. |
- FetcherDelegate::instance_ = this; |
- StartTimer(); |
- } |
- |
- virtual ~FetcherDelegate() {} |
- |
- ResourceFetcher::Callback NewCallback() { |
- return base::Bind(&FetcherDelegate::OnURLFetchComplete, |
- base::Unretained(this)); |
- } |
- |
- virtual void OnURLFetchComplete(const WebURLResponse& response, |
- const std::string& data) { |
- response_ = response; |
- data_ = data; |
- completed_ = true; |
- timer_.Stop(); |
- MessageLoop::current()->Quit(); |
- } |
- |
- bool completed() const { return completed_; } |
- bool timed_out() const { return timed_out_; } |
- |
- std::string data() const { return data_; } |
- const WebURLResponse& response() const { return response_; } |
- |
- // Wait for the request to complete or timeout. We use a loop here b/c the |
- // testing infrastructure (test_shell) can generate spurious calls to the |
- // MessageLoop's Quit method. |
- void WaitForResponse() { |
- while (!completed() && !timed_out()) |
- MessageLoop::current()->Run(); |
- } |
- |
- void StartTimer() { |
- timer_.Start(FROM_HERE, |
- base::TimeDelta::FromMilliseconds(kMaxWaitTimeMs), |
- this, |
- &FetcherDelegate::TimerFired); |
- } |
- |
- void TimerFired() { |
- ASSERT_FALSE(completed_); |
- |
- timed_out_ = true; |
- MessageLoop::current()->Quit(); |
- FAIL() << "fetch timed out"; |
- } |
- |
- static FetcherDelegate* instance_; |
- |
- private: |
- base::OneShotTimer<FetcherDelegate> timer_; |
- bool completed_; |
- bool timed_out_; |
- WebURLResponse response_; |
- std::string data_; |
-}; |
- |
-FetcherDelegate* FetcherDelegate::instance_ = NULL; |
- |
-// Test a fetch from the test server. |
-// Flaky, http://crbug.com/51622. |
-TEST_F(ResourceFetcherTests, DISABLED_ResourceFetcherDownload) { |
- ASSERT_TRUE(test_server_.Start()); |
- |
- WebFrame* frame = test_shell_->webView()->mainFrame(); |
- |
- GURL url(test_server_.GetURL("files/test_shell/index.html")); |
- scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); |
- scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcher( |
- url, frame, WebURLRequest::TargetIsMainFrame, delegate->NewCallback())); |
- |
- delegate->WaitForResponse(); |
- |
- ASSERT_TRUE(delegate->completed()); |
- EXPECT_EQ(delegate->response().httpStatusCode(), 200); |
- std::string text = delegate->data(); |
- EXPECT_TRUE(text.find("What is this page?") != std::string::npos); |
- |
- // Test 404 response. |
- url = test_server_.GetURL("files/thisfiledoesntexist.html"); |
- delegate.reset(new FetcherDelegate); |
- fetcher.reset(new ResourceFetcher(url, frame, |
- WebURLRequest::TargetIsMainFrame, |
- delegate->NewCallback())); |
- |
- delegate->WaitForResponse(); |
- |
- ASSERT_TRUE(delegate->completed()); |
- EXPECT_EQ(delegate->response().httpStatusCode(), 404); |
- EXPECT_TRUE(delegate->data().find("Not Found.") != std::string::npos); |
-} |
- |
-// Flaky, http://crbug.com/51622. |
-TEST_F(ResourceFetcherTests, DISABLED_ResourceFetcherDidFail) { |
- ASSERT_TRUE(test_server_.Start()); |
- |
- WebFrame* frame = test_shell_->webView()->mainFrame(); |
- |
- // Try to fetch a page on a site that doesn't exist. |
- GURL url("http://localhost:1339/doesnotexist"); |
- scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); |
- scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcher( |
- url, frame, WebURLRequest::TargetIsMainFrame, delegate->NewCallback())); |
- |
- delegate->WaitForResponse(); |
- |
- // When we fail, we still call the Delegate callback but we pass in empty |
- // values. |
- EXPECT_TRUE(delegate->completed()); |
- EXPECT_TRUE(delegate->response().isNull()); |
- EXPECT_EQ(delegate->data(), std::string()); |
- EXPECT_FALSE(delegate->timed_out()); |
-} |
- |
-TEST_F(ResourceFetcherTests, ResourceFetcherTimeout) { |
- ASSERT_TRUE(test_server_.Start()); |
- |
- WebFrame* frame = test_shell_->webView()->mainFrame(); |
- |
- // Grab a page that takes at least 1 sec to respond, but set the fetcher to |
- // timeout in 0 sec. |
- GURL url(test_server_.GetURL("slow?1")); |
- scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); |
- scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcherWithTimeout( |
- url, frame, WebURLRequest::TargetIsMainFrame, |
- 0, delegate->NewCallback())); |
- |
- delegate->WaitForResponse(); |
- |
- // When we timeout, we still call the Delegate callback but we pass in empty |
- // values. |
- EXPECT_TRUE(delegate->completed()); |
- EXPECT_TRUE(delegate->response().isNull()); |
- EXPECT_EQ(delegate->data(), std::string()); |
- EXPECT_FALSE(delegate->timed_out()); |
-} |
- |
-class EvilFetcherDelegate : public FetcherDelegate { |
- public: |
- virtual ~EvilFetcherDelegate() {} |
- |
- void SetFetcher(ResourceFetcher* fetcher) { |
- fetcher_.reset(fetcher); |
- } |
- |
- virtual void OnURLFetchComplete(const WebURLResponse& response, |
- const std::string& data) OVERRIDE { |
- // Destroy the ResourceFetcher here. We are testing that upon returning |
- // to the ResourceFetcher that it does not crash. |
- fetcher_.reset(); |
- FetcherDelegate::OnURLFetchComplete(response, data); |
- } |
- |
- private: |
- scoped_ptr<ResourceFetcher> fetcher_; |
-}; |
- |
-TEST_F(ResourceFetcherTests, ResourceFetcherDeletedInCallback) { |
- ASSERT_TRUE(test_server_.Start()); |
- |
- WebFrame* frame = test_shell_->webView()->mainFrame(); |
- |
- // Grab a page that takes at least 1 sec to respond, but set the fetcher to |
- // timeout in 0 sec. |
- GURL url(test_server_.GetURL("slow?1")); |
- scoped_ptr<EvilFetcherDelegate> delegate(new EvilFetcherDelegate); |
- scoped_ptr<ResourceFetcher> fetcher(new ResourceFetcherWithTimeout( |
- url, frame, WebURLRequest::TargetIsMainFrame, |
- 0, delegate->NewCallback())); |
- delegate->SetFetcher(fetcher.release()); |
- |
- delegate->WaitForResponse(); |
- EXPECT_FALSE(delegate->timed_out()); |
-} |
- |
-} // namespace |