OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
11 #include "chrome/browser/devtools/devtools_network_conditions.h" | 11 #include "chrome/browser/devtools/devtools_network_conditions.h" |
12 #include "chrome/browser/devtools/devtools_network_controller.h" | 12 #include "chrome/browser/devtools/devtools_network_controller.h" |
13 #include "chrome/browser/devtools/devtools_network_transaction.h" | 13 #include "chrome/browser/devtools/devtools_network_transaction.h" |
14 #include "net/http/http_transaction_test_util.h" | 14 #include "net/http/http_transaction_test_util.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "url/gurl.h" | 16 #include "url/gurl.h" |
17 | 17 |
18 namespace test { | 18 namespace test { |
19 | 19 |
20 const char kClientId[] = "42"; | |
21 const char kAnotherClientId[] = "24"; | |
22 | |
23 const char kHttpDotCom[] = "http://dot.com"; | 20 const char kHttpDotCom[] = "http://dot.com"; |
24 const char kHttpDotOrg[] = "http://dot.org"; | 21 const char kHttpDotOrg[] = "http://dot.org"; |
25 const char kCom[] = "com"; | 22 const char kCom[] = "com"; |
26 | 23 |
27 class TestCallback { | 24 class TestCallback { |
28 public: | 25 public: |
29 TestCallback() : run_count_(0), value_(0) {} | 26 TestCallback() : run_count_(0), value_(0) {} |
30 void Run(int value) { | 27 void Run(int value) { |
31 run_count_++; | 28 run_count_++; |
32 value_ = value; | 29 value_ = value; |
(...skipping 23 matching lines...) Expand all Loading... |
56 transaction_.reset(new DevToolsNetworkTransaction( | 53 transaction_.reset(new DevToolsNetworkTransaction( |
57 &controller_, network_transaction.Pass())); | 54 &controller_, network_transaction.Pass())); |
58 } | 55 } |
59 | 56 |
60 net::HttpRequestInfo* GetRequest() { | 57 net::HttpRequestInfo* GetRequest() { |
61 if (!request_) | 58 if (!request_) |
62 request_.reset(new MockHttpRequest(mock_transaction_)); | 59 request_.reset(new MockHttpRequest(mock_transaction_)); |
63 return request_.get(); | 60 return request_.get(); |
64 } | 61 } |
65 | 62 |
66 void SetNetworkState(const std::string& client_id, bool offline) { | 63 void SetNetworkState(bool offline) { |
67 std::vector<std::string> domains; | 64 std::vector<std::string> domains; |
68 domains.push_back(kCom); | 65 domains.push_back(kCom); |
69 scoped_refptr<DevToolsNetworkConditions> conditions; | 66 scoped_refptr<DevToolsNetworkConditions> conditions; |
70 if (offline) | 67 if (offline) |
71 conditions = new DevToolsNetworkConditions(domains, 0.0); | 68 conditions = new DevToolsNetworkConditions(domains, 0.0); |
72 controller_.SetNetworkStateOnIO(client_id, conditions); | 69 controller_.SetNetworkStateOnIO(conditions); |
73 } | 70 } |
74 | 71 |
75 int Start() { | 72 int Start() { |
76 return transaction_->Start( | 73 return transaction_->Start( |
77 GetRequest(), completion_callback_, net::BoundNetLog()); | 74 GetRequest(), completion_callback_, net::BoundNetLog()); |
78 } | 75 } |
79 | 76 |
80 int Read() { | 77 int Read() { |
81 return transaction_->Read(buffer_.get(), 64, completion_callback_); | 78 return transaction_->Read(buffer_.get(), 64, completion_callback_); |
82 } | 79 } |
(...skipping 18 matching lines...) Expand all Loading... |
101 scoped_refptr<net::IOBuffer> buffer_; | 98 scoped_refptr<net::IOBuffer> buffer_; |
102 scoped_ptr<MockHttpRequest> request_; | 99 scoped_ptr<MockHttpRequest> request_; |
103 }; | 100 }; |
104 | 101 |
105 TEST(DevToolsNetworkControllerTest, SingleDisableEnable) { | 102 TEST(DevToolsNetworkControllerTest, SingleDisableEnable) { |
106 DevToolsNetworkControllerHelper helper; | 103 DevToolsNetworkControllerHelper helper; |
107 DevToolsNetworkController* controller = helper.controller(); | 104 DevToolsNetworkController* controller = helper.controller(); |
108 net::HttpRequestInfo* request = helper.GetRequest(); | 105 net::HttpRequestInfo* request = helper.GetRequest(); |
109 | 106 |
110 EXPECT_FALSE(controller->ShouldFail(request)); | 107 EXPECT_FALSE(controller->ShouldFail(request)); |
111 helper.SetNetworkState(kClientId, true); | 108 helper.SetNetworkState(true); |
112 EXPECT_TRUE(controller->ShouldFail(request)); | 109 EXPECT_TRUE(controller->ShouldFail(request)); |
113 helper.SetNetworkState(kClientId, false); | 110 helper.SetNetworkState(false); |
114 EXPECT_FALSE(controller->ShouldFail(request)); | |
115 } | |
116 | |
117 TEST(DevToolsNetworkControllerTest, DoubleDisableEnable) { | |
118 DevToolsNetworkControllerHelper helper; | |
119 DevToolsNetworkController* controller = helper.controller(); | |
120 net::HttpRequestInfo* request = helper.GetRequest(); | |
121 | |
122 EXPECT_FALSE(controller->ShouldFail(request)); | |
123 helper.SetNetworkState(kClientId, true); | |
124 EXPECT_TRUE(controller->ShouldFail(request)); | |
125 helper.SetNetworkState(kAnotherClientId, true); | |
126 EXPECT_TRUE(controller->ShouldFail(request)); | |
127 helper.SetNetworkState(kClientId, false); | |
128 EXPECT_TRUE(controller->ShouldFail(request)); | |
129 helper.SetNetworkState(kAnotherClientId, false); | |
130 EXPECT_FALSE(controller->ShouldFail(request)); | 111 EXPECT_FALSE(controller->ShouldFail(request)); |
131 } | 112 } |
132 | 113 |
133 TEST(DevToolsNetworkControllerTest, FailOnStart) { | 114 TEST(DevToolsNetworkControllerTest, FailOnStart) { |
134 DevToolsNetworkControllerHelper helper; | 115 DevToolsNetworkControllerHelper helper; |
135 helper.SetNetworkState(kClientId, true); | 116 helper.SetNetworkState(true); |
136 | 117 |
137 int rv = helper.Start(); | 118 int rv = helper.Start(); |
138 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); | 119 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); |
139 | 120 |
140 base::RunLoop().RunUntilIdle(); | 121 base::RunLoop().RunUntilIdle(); |
141 EXPECT_EQ(helper.callback()->run_count(), 0); | 122 EXPECT_EQ(helper.callback()->run_count(), 0); |
142 } | 123 } |
143 | 124 |
144 TEST(DevToolsNetworkControllerTest, FailRunningTransaction) { | 125 TEST(DevToolsNetworkControllerTest, FailRunningTransaction) { |
145 DevToolsNetworkControllerHelper helper; | 126 DevToolsNetworkControllerHelper helper; |
146 TestCallback* callback = helper.callback(); | 127 TestCallback* callback = helper.callback(); |
147 | 128 |
148 int rv = helper.Start(); | 129 int rv = helper.Start(); |
149 EXPECT_EQ(rv, net::OK); | 130 EXPECT_EQ(rv, net::OK); |
150 | 131 |
151 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); | 132 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); |
152 rv = helper.Read(); | 133 rv = helper.Read(); |
153 EXPECT_EQ(rv, net::ERR_IO_PENDING); | 134 EXPECT_EQ(rv, net::ERR_IO_PENDING); |
154 EXPECT_EQ(callback->run_count(), 0); | 135 EXPECT_EQ(callback->run_count(), 0); |
155 | 136 |
156 helper.SetNetworkState(kClientId, true); | 137 helper.SetNetworkState(true); |
157 EXPECT_EQ(callback->run_count(), 1); | 138 EXPECT_EQ(callback->run_count(), 1); |
158 EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED); | 139 EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED); |
159 | 140 |
160 // Wait until HttpTrancation completes reading and invokes callback. | 141 // Wait until HttpTrancation completes reading and invokes callback. |
161 // DevToolsNetworkTransaction should ignore callback, because it has | 142 // DevToolsNetworkTransaction should ignore callback, because it has |
162 // reported network error already. | 143 // reported network error already. |
163 base::RunLoop().RunUntilIdle(); | 144 base::RunLoop().RunUntilIdle(); |
164 EXPECT_EQ(callback->run_count(), 1); | 145 EXPECT_EQ(callback->run_count(), 1); |
165 | 146 |
166 // Check that transaction in not failed second time. | 147 // Check that transaction in not failed second time. |
167 helper.SetNetworkState(kClientId, false); | 148 helper.SetNetworkState(false); |
168 helper.SetNetworkState(kClientId, true); | 149 helper.SetNetworkState(true); |
169 EXPECT_EQ(callback->run_count(), 1); | 150 EXPECT_EQ(callback->run_count(), 1); |
170 } | 151 } |
171 | 152 |
172 TEST(DevToolsNetworkControllerTest, ReadAfterFail) { | 153 TEST(DevToolsNetworkControllerTest, ReadAfterFail) { |
173 DevToolsNetworkControllerHelper helper; | 154 DevToolsNetworkControllerHelper helper; |
174 | 155 |
175 int rv = helper.Start(); | 156 int rv = helper.Start(); |
176 EXPECT_EQ(rv, net::OK); | 157 EXPECT_EQ(rv, net::OK); |
177 EXPECT_TRUE(helper.transaction()->request()); | 158 EXPECT_TRUE(helper.transaction()->request()); |
178 | 159 |
179 helper.SetNetworkState(kClientId, true); | 160 helper.SetNetworkState(true); |
180 EXPECT_TRUE(helper.transaction()->failed()); | 161 EXPECT_TRUE(helper.transaction()->failed()); |
181 | 162 |
182 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); | 163 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); |
183 rv = helper.Read(); | 164 rv = helper.Read(); |
184 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); | 165 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); |
185 | 166 |
186 // Check that callback is never invoked. | 167 // Check that callback is never invoked. |
187 base::RunLoop().RunUntilIdle(); | 168 base::RunLoop().RunUntilIdle(); |
188 EXPECT_EQ(helper.callback()->run_count(), 0); | 169 EXPECT_EQ(helper.callback()->run_count(), 0); |
189 } | 170 } |
190 | 171 |
191 TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) { | 172 TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) { |
192 DevToolsNetworkControllerHelper helper; | 173 DevToolsNetworkControllerHelper helper; |
193 helper.mock_transaction()->request_headers = | 174 helper.mock_transaction()->request_headers = |
194 "X-DevTools-Request-Initiator: frontend\r\n"; | 175 "X-DevTools-Request-Initiator: frontend\r\n"; |
195 DevToolsNetworkController* controller = helper.controller(); | 176 DevToolsNetworkController* controller = helper.controller(); |
196 net::HttpRequestInfo* request = helper.GetRequest(); | 177 net::HttpRequestInfo* request = helper.GetRequest(); |
197 | 178 |
198 EXPECT_FALSE(controller->ShouldFail(request)); | 179 EXPECT_FALSE(controller->ShouldFail(request)); |
199 helper.SetNetworkState(kClientId, true); | 180 helper.SetNetworkState(true); |
200 EXPECT_FALSE(controller->ShouldFail(request)); | 181 EXPECT_FALSE(controller->ShouldFail(request)); |
201 } | 182 } |
202 | 183 |
203 TEST(DevToolsNetworkControllerTest, AllowsNotMatchingRequests) { | 184 TEST(DevToolsNetworkControllerTest, AllowsNotMatchingRequests) { |
204 DevToolsNetworkControllerHelper helper; | 185 DevToolsNetworkControllerHelper helper; |
205 helper.mock_transaction()->url = kHttpDotOrg; | 186 helper.mock_transaction()->url = kHttpDotOrg; |
206 DevToolsNetworkController* controller = helper.controller(); | 187 DevToolsNetworkController* controller = helper.controller(); |
207 net::HttpRequestInfo* request = helper.GetRequest(); | 188 net::HttpRequestInfo* request = helper.GetRequest(); |
208 | 189 |
209 EXPECT_FALSE(controller->ShouldFail(request)); | 190 EXPECT_FALSE(controller->ShouldFail(request)); |
210 helper.SetNetworkState(kClientId, true); | 191 helper.SetNetworkState(true); |
211 EXPECT_FALSE(controller->ShouldFail(request)); | 192 EXPECT_FALSE(controller->ShouldFail(request)); |
212 } | 193 } |
213 | 194 |
214 } // namespace test | 195 } // namespace test |
OLD | NEW |