| Index: webkit/glue/resource_fetcher_unittest.cc
|
| ===================================================================
|
| --- webkit/glue/resource_fetcher_unittest.cc (revision 71995)
|
| +++ webkit/glue/resource_fetcher_unittest.cc (working copy)
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/callback.h"
|
| #include "base/message_loop.h"
|
| +#include "base/timer.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
| @@ -13,10 +14,6 @@
|
| #include "webkit/tools/test_shell/simple_resource_loader_bridge.h"
|
| #include "webkit/tools/test_shell/test_shell_test.h"
|
|
|
| -#if defined(TOOLKIT_USES_GTK)
|
| -#include <gtk/gtk.h>
|
| -#endif
|
| -
|
| using WebKit::WebFrame;
|
| using WebKit::WebURLResponse;
|
| using webkit_glue::ResourceFetcher;
|
| @@ -30,16 +27,16 @@
|
| };
|
|
|
| static const int kMaxWaitTimeMs = 5000;
|
| -static const int kWaitIntervalMs = 100;
|
|
|
| class FetcherDelegate {
|
| public:
|
| FetcherDelegate()
|
| - : timer_id_(0), completed_(false), time_elapsed_ms_(0) {
|
| + : 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;
|
| - CreateTimer(kWaitIntervalMs);
|
| + StartTimer();
|
| }
|
|
|
| ResourceFetcher::Callback* NewCallback() {
|
| @@ -51,14 +48,13 @@
|
| response_ = response;
|
| data_ = data;
|
| completed_ = true;
|
| - DestroyTimer();
|
| + timer_.Stop();
|
| MessageLoop::current()->Quit();
|
| }
|
|
|
| bool completed() const { return completed_; }
|
| - bool timed_out() const { return time_elapsed_ms_ > kMaxWaitTimeMs; }
|
| + bool timed_out() const { return timed_out_; }
|
|
|
| - int time_elapsed_ms() const { return time_elapsed_ms_; }
|
| std::string data() const { return data_; }
|
| const WebURLResponse& response() const { return response_; }
|
|
|
| @@ -70,78 +66,26 @@
|
| MessageLoop::current()->Run();
|
| }
|
|
|
| - void CreateTimer(int interval) {
|
| -#if defined(OS_WIN)
|
| - timer_id_ = ::SetTimer(NULL, NULL, interval,
|
| - &FetcherDelegate::TimerCallback);
|
| -#elif defined(TOOLKIT_USES_GTK)
|
| - timer_id_ = g_timeout_add(interval, &FetcherDelegate::TimerCallback, NULL);
|
| -#elif defined(OS_MACOSX)
|
| - // CFAbsoluteTime is in seconds and |interval| is in ms, so make sure we
|
| - // keep the units correct.
|
| - CFTimeInterval interval_in_seconds = static_cast<double>(interval) / 1000.0;
|
| - CFAbsoluteTime fire_date =
|
| - CFAbsoluteTimeGetCurrent() + interval_in_seconds;
|
| - timer_id_ = CFRunLoopTimerCreate(NULL, fire_date, interval_in_seconds, 0,
|
| - 0, FetcherDelegate::TimerCallback, NULL);
|
| - CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer_id_, kCFRunLoopCommonModes);
|
| -#endif
|
| + void StartTimer() {
|
| + timer_.Start(base::TimeDelta::FromMilliseconds(kMaxWaitTimeMs),
|
| + this,
|
| + &FetcherDelegate::TimerFired);
|
| }
|
|
|
| - void DestroyTimer() {
|
| -#if defined(OS_WIN)
|
| - ::KillTimer(NULL, timer_id_);
|
| -#elif defined(TOOLKIT_USES_GTK)
|
| - g_source_remove(timer_id_);
|
| -#elif defined(OS_MACOSX)
|
| - CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), timer_id_,
|
| - kCFRunLoopCommonModes);
|
| - CFRelease(timer_id_);
|
| -#endif
|
| - }
|
| -
|
| -#if defined(OS_WIN)
|
| - // Static timer callback, just passes through to instance version.
|
| - static VOID CALLBACK TimerCallback(HWND hwnd, UINT msg, UINT_PTR timer_id,
|
| - DWORD ms) {
|
| - instance_->TimerFired();
|
| - }
|
| -#elif defined(TOOLKIT_USES_GTK)
|
| - static gboolean TimerCallback(gpointer data) {
|
| - instance_->TimerFired();
|
| - return true;
|
| - }
|
| -#elif defined(OS_MACOSX)
|
| - static void TimerCallback(CFRunLoopTimerRef timer, void* info) {
|
| - instance_->TimerFired();
|
| - }
|
| -#endif
|
| -
|
| void TimerFired() {
|
| ASSERT_FALSE(completed_);
|
|
|
| - if (timed_out()) {
|
| - DestroyTimer();
|
| - MessageLoop::current()->Quit();
|
| - FAIL() << "fetch timed out";
|
| - return;
|
| - }
|
| -
|
| - time_elapsed_ms_ += kWaitIntervalMs;
|
| + timed_out_ = true;
|
| + MessageLoop::current()->Quit();
|
| + FAIL() << "fetch timed out";
|
| }
|
|
|
| static FetcherDelegate* instance_;
|
|
|
| private:
|
| -#if defined(OS_WIN)
|
| - UINT_PTR timer_id_;
|
| -#elif defined(TOOLKIT_USES_GTK)
|
| - guint timer_id_;
|
| -#elif defined(OS_MACOSX)
|
| - CFRunLoopTimerRef timer_id_;
|
| -#endif
|
| + base::OneShotTimer<FetcherDelegate> timer_;
|
| bool completed_;
|
| - int time_elapsed_ms_;
|
| + bool timed_out_;
|
| WebURLResponse response_;
|
| std::string data_;
|
| };
|
| @@ -198,7 +142,7 @@
|
| EXPECT_TRUE(delegate->completed());
|
| EXPECT_TRUE(delegate->response().isNull());
|
| EXPECT_EQ(delegate->data(), std::string());
|
| - EXPECT_TRUE(delegate->time_elapsed_ms() < kMaxWaitTimeMs);
|
| + EXPECT_FALSE(delegate->timed_out());
|
| }
|
|
|
| TEST_F(ResourceFetcherTests, ResourceFetcherTimeout) {
|
| @@ -220,7 +164,7 @@
|
| EXPECT_TRUE(delegate->completed());
|
| EXPECT_TRUE(delegate->response().isNull());
|
| EXPECT_EQ(delegate->data(), std::string());
|
| - EXPECT_TRUE(delegate->time_elapsed_ms() < kMaxWaitTimeMs);
|
| + EXPECT_FALSE(delegate->timed_out());
|
| }
|
|
|
| class EvilFetcherDelegate : public FetcherDelegate {
|
| @@ -255,6 +199,7 @@
|
| delegate->SetFetcher(fetcher.release());
|
|
|
| delegate->WaitForResponse();
|
| + EXPECT_FALSE(delegate->timed_out());
|
| }
|
|
|
| } // namespace
|
|
|