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

Side by Side Diff: chrome/browser/sync/glue/http_bridge_unittest.cc

Issue 1702016: Changed UrlFetcher to use a MessageLoopProxy instead of directly relying on C... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 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
« no previous file with comments | « chrome/browser/sync/glue/http_bridge.cc ('k') | chrome/test/testing_profile.cc » ('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 "base/message_loop_proxy.h"
5 #include "base/thread.h" 6 #include "base/thread.h"
6 #include "chrome/browser/chrome_thread.h" 7 #include "chrome/browser/chrome_thread.h"
7 #include "chrome/browser/net/test_url_fetcher_factory.h" 8 #include "chrome/browser/net/test_url_fetcher_factory.h"
8 #include "chrome/browser/sync/glue/http_bridge.h" 9 #include "chrome/browser/sync/glue/http_bridge.h"
9 #include "net/url_request/url_request_unittest.h" 10 #include "net/url_request/url_request_unittest.h"
10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
11 12
12 using browser_sync::HttpBridge; 13 using browser_sync::HttpBridge;
13 14
14 namespace { 15 namespace {
15 // TODO(timsteele): Should use PathService here. See Chromium Issue 3113. 16 // TODO(timsteele): Should use PathService here. See Chromium Issue 3113.
16 const wchar_t kDocRoot[] = L"chrome/test/data"; 17 const wchar_t kDocRoot[] = L"chrome/test/data";
17 } 18 }
18 19
19 // Lazy getter for TestURLRequestContext instances. 20 // Lazy getter for TestURLRequestContext instances.
20 class TestURLRequestContextGetter : public URLRequestContextGetter { 21 class TestURLRequestContextGetter : public URLRequestContextGetter {
21 public: 22 public:
22 virtual URLRequestContext* GetURLRequestContext() { 23 virtual URLRequestContext* GetURLRequestContext() {
23 if (!context_) 24 if (!context_)
24 context_ = new TestURLRequestContext; 25 context_ = new TestURLRequestContext;
25 return context_; 26 return context_;
26 } 27 }
28 virtual scoped_refptr<MessageLoopProxy> GetIOMessageLoopProxy() {
29 return ChromeThread::GetMessageLoopProxyForThread(ChromeThread::IO);
30 }
31
27 private: 32 private:
28 ~TestURLRequestContextGetter() {} 33 ~TestURLRequestContextGetter() {}
29 34
30 scoped_refptr<URLRequestContext> context_; 35 scoped_refptr<URLRequestContext> context_;
31 }; 36 };
32 37
33 class HttpBridgeTest : public testing::Test { 38 class HttpBridgeTest : public testing::Test {
34 public: 39 public:
35 HttpBridgeTest() 40 HttpBridgeTest()
36 : fake_default_request_context_getter_(NULL), 41 : fake_default_request_context_getter_(NULL),
(...skipping 17 matching lines...) Expand all
54 if (!fake_default_request_context_getter_) { 59 if (!fake_default_request_context_getter_) {
55 fake_default_request_context_getter_ = new TestURLRequestContextGetter(); 60 fake_default_request_context_getter_ = new TestURLRequestContextGetter();
56 fake_default_request_context_getter_->AddRef(); 61 fake_default_request_context_getter_->AddRef();
57 } 62 }
58 HttpBridge* bridge = new HttpBridge( 63 HttpBridge* bridge = new HttpBridge(
59 new HttpBridge::RequestContextGetter( 64 new HttpBridge::RequestContextGetter(
60 fake_default_request_context_getter_)); 65 fake_default_request_context_getter_));
61 return bridge; 66 return bridge;
62 } 67 }
63 68
69 static void TestSameHttpNetworkSession(MessageLoop* main_message_loop,
70 HttpBridgeTest* test) {
71 scoped_refptr<HttpBridge> http_bridge(test->BuildBridge());
72 EXPECT_TRUE(test->GetTestRequestContextGetter());
73 net::HttpNetworkSession* test_session =
74 test->GetTestRequestContextGetter()->GetURLRequestContext()->
75 http_transaction_factory()->GetSession();
76 EXPECT_EQ(test_session,
77 http_bridge->GetRequestContextGetter()->
78 GetURLRequestContext()->
79 http_transaction_factory()->GetSession());
80 main_message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask);
81 }
82
64 MessageLoop* io_thread_loop() { return io_thread_.message_loop(); } 83 MessageLoop* io_thread_loop() { return io_thread_.message_loop(); }
65 84
66 // Note this is lazy created, so don't call this before your bridge. 85 // Note this is lazy created, so don't call this before your bridge.
67 TestURLRequestContextGetter* GetTestRequestContextGetter() { 86 TestURLRequestContextGetter* GetTestRequestContextGetter() {
68 return fake_default_request_context_getter_; 87 return fake_default_request_context_getter_;
69 } 88 }
70 89
71 private: 90 private:
72 // A make-believe "default" request context, as would be returned by 91 // A make-believe "default" request context, as would be returned by
73 // Profile::GetDefaultRequestContext(). Created lazily by BuildBridge. 92 // Profile::GetDefaultRequestContext(). Created lazily by BuildBridge.
74 TestURLRequestContextGetter* fake_default_request_context_getter_; 93 TestURLRequestContextGetter* fake_default_request_context_getter_;
75 94
76 // Separate thread for IO used by the HttpBridge. 95 // Separate thread for IO used by the HttpBridge.
77 ChromeThread io_thread_; 96 ChromeThread io_thread_;
78 97 MessageLoop loop_;
79 }; 98 };
80 99
81 class DummyURLFetcher : public TestURLFetcher { 100 class DummyURLFetcher : public TestURLFetcher {
82 public: 101 public:
83 DummyURLFetcher() : TestURLFetcher(GURL(), POST, NULL) {} 102 DummyURLFetcher() : TestURLFetcher(GURL(), POST, NULL) {}
84 103
85 net::HttpResponseHeaders* response_headers() const { 104 net::HttpResponseHeaders* response_headers() const {
86 return NULL; 105 return NULL;
87 } 106 }
88 }; 107 };
(...skipping 25 matching lines...) Expand all
114 133
115 std::string response_content = "success!"; 134 std::string response_content = "success!";
116 DummyURLFetcher fetcher; 135 DummyURLFetcher fetcher;
117 OnURLFetchComplete(&fetcher, GURL("www.google.com"), URLRequestStatus(), 136 OnURLFetchComplete(&fetcher, GURL("www.google.com"), URLRequestStatus(),
118 200, cookies, response_content); 137 200, cookies, response_content);
119 } 138 }
120 HttpBridgeTest* test_; 139 HttpBridgeTest* test_;
121 }; 140 };
122 141
123 TEST_F(HttpBridgeTest, TestUsesSameHttpNetworkSession) { 142 TEST_F(HttpBridgeTest, TestUsesSameHttpNetworkSession) {
124 scoped_refptr<HttpBridge> http_bridge(this->BuildBridge()); 143 // Run this test on the IO thread because we can only call
125 EXPECT_TRUE(GetTestRequestContextGetter()); 144 // URLRequestContextGetter::GetURLRequestContext on the IO thread.
126 net::HttpNetworkSession* test_session = 145 ChromeThread::PostTask(
127 GetTestRequestContextGetter()->GetURLRequestContext()-> 146 ChromeThread::IO, FROM_HERE,
128 http_transaction_factory()->GetSession(); 147 NewRunnableFunction(&HttpBridgeTest::TestSameHttpNetworkSession,
129 EXPECT_EQ(test_session, 148 MessageLoop::current(), this));
130 http_bridge->GetRequestContextGetter()-> 149 MessageLoop::current()->Run();
131 GetURLRequestContext()->
132 http_transaction_factory()->GetSession());
133 } 150 }
134 151
135 // Test the HttpBridge without actually making any network requests. 152 // Test the HttpBridge without actually making any network requests.
136 TEST_F(HttpBridgeTest, TestMakeSynchronousPostShunted) { 153 TEST_F(HttpBridgeTest, TestMakeSynchronousPostShunted) {
137 scoped_refptr<URLRequestContextGetter> ctx_getter( 154 scoped_refptr<URLRequestContextGetter> ctx_getter(
138 new TestURLRequestContextGetter()); 155 new TestURLRequestContextGetter());
139 scoped_refptr<HttpBridge> http_bridge(new ShuntedHttpBridge( 156 scoped_refptr<HttpBridge> http_bridge(new ShuntedHttpBridge(
140 ctx_getter, this)); 157 ctx_getter, this));
141 http_bridge->SetUserAgent("bob"); 158 http_bridge->SetUserAgent("bob");
142 http_bridge->SetURL("http://www.google.com", 9999); 159 http_bridge->SetURL("http://www.google.com", 9999);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 int os_error = 0; 271 int os_error = 0;
255 int response_code = 0; 272 int response_code = 0;
256 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code); 273 bool success = http_bridge->MakeSynchronousPost(&os_error, &response_code);
257 EXPECT_TRUE(success); 274 EXPECT_TRUE(success);
258 EXPECT_EQ(200, response_code); 275 EXPECT_EQ(200, response_code);
259 EXPECT_EQ(0, os_error); 276 EXPECT_EQ(0, os_error);
260 277
261 EXPECT_EQ(http_bridge->GetResponseHeaderValue("Content-type"), "text/html"); 278 EXPECT_EQ(http_bridge->GetResponseHeaderValue("Content-type"), "text/html");
262 EXPECT_TRUE(http_bridge->GetResponseHeaderValue("invalid-header").empty()); 279 EXPECT_TRUE(http_bridge->GetResponseHeaderValue("invalid-header").empty());
263 } 280 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/http_bridge.cc ('k') | chrome/test/testing_profile.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698