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

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

Issue 9701: Port a resource fetcher test shell test to linux. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 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 | « no previous file | webkit/tools/test_shell/SConscript » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "config.h" 5 #include "config.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 8
9 MSVC_PUSH_WARNING_LEVEL(0); 9 MSVC_PUSH_WARNING_LEVEL(0);
10 #include "ResourceResponse.h" 10 #include "ResourceResponse.h"
11 MSVC_POP_WARNING(); 11 MSVC_POP_WARNING();
12 #undef LOG 12 #undef LOG
13 13
14 #if defined(OS_LINUX)
15 #include <gtk/gtk.h>
16 #endif
17
14 #include "webkit/glue/unittest_test_server.h" 18 #include "webkit/glue/unittest_test_server.h"
15 #include "webkit/glue/webview.h" 19 #include "webkit/glue/webview.h"
16 #include "webkit/glue/webframe_impl.h" 20 #include "webkit/glue/webframe_impl.h"
17 #include "webkit/glue/resource_fetcher.h" 21 #include "webkit/glue/resource_fetcher.h"
18 #include "webkit/tools/test_shell/simple_resource_loader_bridge.h" 22 #include "webkit/tools/test_shell/simple_resource_loader_bridge.h"
19 #include "webkit/tools/test_shell/test_shell_test.h" 23 #include "webkit/tools/test_shell/test_shell_test.h"
20 24
21 using WebCore::ResourceResponse; 25 using WebCore::ResourceResponse;
22 26
23 namespace { 27 namespace {
24 28
25
26 class ResourceFetcherTests : public TestShellTest { 29 class ResourceFetcherTests : public TestShellTest {
27 public: 30 public:
28 void SetUp() { 31 void SetUp() {
29 TestShellTest::SetUp(); 32 TestShellTest::SetUp();
30 } 33 }
31 void TearDown() { 34 void TearDown() {
32 TestShellTest::TearDown(); 35 TestShellTest::TearDown();
33 } 36 }
34 }; 37 };
35 38
36 static const int kMaxWaitTimeMs = 5000; 39 static const int kMaxWaitTimeMs = 5000;
37 static const int kWaitIntervalMs = 100; 40 static const int kWaitIntervalMs = 100;
38 41
39 class FetcherDelegate : public ResourceFetcher::Delegate { 42 class FetcherDelegate : public ResourceFetcher::Delegate {
40 public: 43 public:
41 FetcherDelegate() 44 FetcherDelegate()
42 : timer_id_(0), completed_(false), time_elapsed_ms_(0) { 45 : timer_id_(0), completed_(false), time_elapsed_ms_(0) {
43 // Start a repeating timer waiting for the download to complete. The 46 // Start a repeating timer waiting for the download to complete. The
44 // callback has to be a static function, so we hold on to our instance. 47 // callback has to be a static function, so we hold on to our instance.
45 FetcherDelegate::instance_ = this; 48 FetcherDelegate::instance_ = this;
46 timer_id_ = SetTimer(NULL, NULL, kWaitIntervalMs, 49 CreateTimer(kWaitIntervalMs);
47 &FetcherDelegate::TimerCallback);
48 } 50 }
49 51
50 virtual void OnURLFetchComplete(const ResourceResponse& response, 52 virtual void OnURLFetchComplete(const ResourceResponse& response,
51 const std::string& data) { 53 const std::string& data) {
52 response_ = response; 54 response_ = response;
53 data_ = data; 55 data_ = data;
54 completed_ = true; 56 completed_ = true;
55 KillTimer(NULL, timer_id_); 57 DestroyTimer();
56 MessageLoop::current()->Quit(); 58 MessageLoop::current()->Quit();
57 } 59 }
58 60
59 bool completed() const { return completed_; } 61 bool completed() const { return completed_; }
60 bool timed_out() const { return time_elapsed_ms_ > kMaxWaitTimeMs; } 62 bool timed_out() const { return time_elapsed_ms_ > kMaxWaitTimeMs; }
61 63
62 int time_elapsed_ms() const { return time_elapsed_ms_; } 64 int time_elapsed_ms() const { return time_elapsed_ms_; }
63 std::string data() const { return data_; } 65 std::string data() const { return data_; }
64 ResourceResponse response() const { return response_; } 66 ResourceResponse response() const { return response_; }
65 67
66 // Wait for the request to complete or timeout. We use a loop here b/c the 68 // Wait for the request to complete or timeout. We use a loop here b/c the
67 // testing infrastructure (test_shell) can generate spurious calls to the 69 // testing infrastructure (test_shell) can generate spurious calls to the
68 // MessageLoop's Quit method. 70 // MessageLoop's Quit method.
69 void WaitForResponse() { 71 void WaitForResponse() {
70 while (!completed() && !timed_out()) 72 while (!completed() && !timed_out())
71 MessageLoop::current()->Run(); 73 MessageLoop::current()->Run();
72 } 74 }
73 75
76 void CreateTimer(int interval) {
77 #if defined(OS_WIN)
78 timer_id_ = ::SetTimer(NULL, NULL, interval,
79 &FetcherDelegate::TimerCallback);
80 #elif defined(OS_LINUX)
81 timer_id_ = g_timeout_add(interval, &FetcherDelegate::TimerCallback, NULL);
82 #endif
83 }
84
85 void DestroyTimer() {
86 #if defined(OS_WIN)
87 ::KillTimer(NULL, timer_id_);
88 #elif defined(OS_LINUX)
89 g_source_remove(timer_id_);
90 #endif
91 }
92
93 #if defined(OS_WIN)
74 // Static timer callback, just passes through to instance version. 94 // Static timer callback, just passes through to instance version.
75 static VOID CALLBACK TimerCallback(HWND hwnd, UINT msg, UINT_PTR timer_id, 95 static VOID CALLBACK TimerCallback(HWND hwnd, UINT msg, UINT_PTR timer_id,
76 DWORD ms) { 96 DWORD ms) {
77 instance_->TimerFired(hwnd, timer_id); 97 instance_->TimerFired();
78 } 98 }
79 99 #elif defined(OS_LINUX)
80 void TimerFired(HWND hwnd, UINT_PTR timer_id) { 100 static gboolean TimerCallback(gpointer data) {
101 instance_->TimerFired();
102 return true;
103 }
104 #endif
105
106 void TimerFired() {
81 ASSERT_FALSE(completed_); 107 ASSERT_FALSE(completed_);
82 108
83 if (timed_out()) { 109 if (timed_out()) {
84 printf("timer fired\n"); 110 DestroyTimer();
85 KillTimer(hwnd, timer_id);
86 MessageLoop::current()->Quit(); 111 MessageLoop::current()->Quit();
87 FAIL() << "fetch timed out"; 112 FAIL() << "fetch timed out";
88 return; 113 return;
89 } 114 }
90 115
91 time_elapsed_ms_ += kWaitIntervalMs; 116 time_elapsed_ms_ += kWaitIntervalMs;
92 } 117 }
93 118
94 static FetcherDelegate* instance_; 119 static FetcherDelegate* instance_;
95 120
96 private: 121 private:
122 #if defined(OS_WIN)
97 UINT_PTR timer_id_; 123 UINT_PTR timer_id_;
124 #elif defined(OS_LINUX)
125 guint timer_id_;
126 #endif
98 bool completed_; 127 bool completed_;
99 int time_elapsed_ms_; 128 int time_elapsed_ms_;
100 ResourceResponse response_; 129 ResourceResponse response_;
101 std::string data_; 130 std::string data_;
102 }; 131 };
103 132
104 FetcherDelegate* FetcherDelegate::instance_ = NULL; 133 FetcherDelegate* FetcherDelegate::instance_ = NULL;
105 134
106 } // namespace 135 } // namespace
107 136
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 delegate->WaitForResponse(); 208 delegate->WaitForResponse();
180 209
181 // When we timeout, we still call the Delegate callback but we pass in empty 210 // When we timeout, we still call the Delegate callback but we pass in empty
182 // values. 211 // values.
183 EXPECT_TRUE(delegate->completed()); 212 EXPECT_TRUE(delegate->completed());
184 EXPECT_TRUE(delegate->response().isNull()); 213 EXPECT_TRUE(delegate->response().isNull());
185 EXPECT_EQ(delegate->data(), std::string()); 214 EXPECT_EQ(delegate->data(), std::string());
186 EXPECT_TRUE(delegate->time_elapsed_ms() < kMaxWaitTimeMs); 215 EXPECT_TRUE(delegate->time_elapsed_ms() < kMaxWaitTimeMs);
187 } 216 }
188 217
OLDNEW
« no previous file with comments | « no previous file | webkit/tools/test_shell/SConscript » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698