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

Side by Side Diff: chrome/browser/devtools/devtools_network_controller_unittest.cc

Issue 342473004: DevTools: make network conditions emulation scoped (browser) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed nits Created 6 years, 6 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
OLDNEW
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 kHttpDotCom[] = "http://dot.com"; 20 const char kClientId[] = "42";
21 const char kHttpDotOrg[] = "http://dot.org"; 21 const char kAnotherClientId[] = "24";
22 const char kCom[] = "com";
23 22
24 class TestCallback { 23 class TestCallback {
25 public: 24 public:
26 TestCallback() : run_count_(0), value_(0) {} 25 TestCallback() : run_count_(0), value_(0) {}
27 void Run(int value) { 26 void Run(int value) {
28 run_count_++; 27 run_count_++;
29 value_ = value; 28 value_ = value;
30 } 29 }
31 int run_count() { return run_count_; } 30 int run_count() { return run_count_; }
32 int value() { return value_; } 31 int value() { return value_; }
33 32
34 private: 33 private:
35 int run_count_; 34 int run_count_;
36 int value_; 35 int value_;
37 }; 36 };
38 37
39 class DevToolsNetworkControllerHelper { 38 class DevToolsNetworkControllerHelper {
40 public: 39 public:
41 DevToolsNetworkControllerHelper() : 40 DevToolsNetworkControllerHelper() :
42 completion_callback_( 41 completion_callback_(
43 base::Bind(&TestCallback::Run, base::Unretained(&callback_))), 42 base::Bind(&TestCallback::Run, base::Unretained(&callback_))),
44 mock_transaction_(kSimpleGET_Transaction), 43 mock_transaction_(kSimpleGET_Transaction),
45 buffer_(new net::IOBuffer(64)) { 44 buffer_(new net::IOBuffer(64)) {
46 mock_transaction_.test_mode = TEST_MODE_SYNC_NET_START; 45 mock_transaction_.test_mode = TEST_MODE_SYNC_NET_START;
47 mock_transaction_.url = kHttpDotCom; 46 mock_transaction_.url = "http://dot.com";
47 mock_transaction_.request_headers =
48 "X-DevTools-Emulate-Network-Conditions-Client-Id: 42\r\n";
48 AddMockTransaction(&mock_transaction_); 49 AddMockTransaction(&mock_transaction_);
49 50
50 scoped_ptr<net::HttpTransaction> network_transaction; 51 scoped_ptr<net::HttpTransaction> network_transaction;
51 network_layer_.CreateTransaction( 52 network_layer_.CreateTransaction(
52 net::DEFAULT_PRIORITY, &network_transaction); 53 net::DEFAULT_PRIORITY, &network_transaction);
53 transaction_.reset(new DevToolsNetworkTransaction( 54 transaction_.reset(new DevToolsNetworkTransaction(
54 &controller_, network_transaction.Pass())); 55 &controller_, network_transaction.Pass()));
55 } 56 }
56 57
57 net::HttpRequestInfo* GetRequest() { 58 net::HttpRequestInfo* GetRequest() {
58 if (!request_) 59 if (!request_)
59 request_.reset(new MockHttpRequest(mock_transaction_)); 60 request_.reset(new MockHttpRequest(mock_transaction_));
60 return request_.get(); 61 return request_.get();
61 } 62 }
62 63
63 void SetNetworkState(bool offline) { 64 void SetNetworkState(const std::string id, bool offline) {
64 std::vector<std::string> domains;
65 domains.push_back(kCom);
66 scoped_refptr<DevToolsNetworkConditions> conditions; 65 scoped_refptr<DevToolsNetworkConditions> conditions;
67 if (offline) 66 if (offline)
68 conditions = new DevToolsNetworkConditions(domains, 0.0); 67 conditions = new DevToolsNetworkConditions(0, 0, 0);
69 controller_.SetNetworkStateOnIO(conditions); 68 controller_.SetNetworkStateOnIO(id, conditions);
70 } 69 }
71 70
72 int Start() { 71 int Start() {
73 return transaction_->Start( 72 return transaction_->Start(
74 GetRequest(), completion_callback_, net::BoundNetLog()); 73 GetRequest(), completion_callback_, net::BoundNetLog());
75 } 74 }
76 75
77 int Read() { 76 int Read() {
78 return transaction_->Read(buffer_.get(), 64, completion_callback_); 77 return transaction_->Read(buffer_.get(), 64, completion_callback_);
79 } 78 }
(...skipping 15 matching lines...) Expand all
95 MockTransaction mock_transaction_; 94 MockTransaction mock_transaction_;
96 DevToolsNetworkController controller_; 95 DevToolsNetworkController controller_;
97 scoped_ptr<DevToolsNetworkTransaction> transaction_; 96 scoped_ptr<DevToolsNetworkTransaction> transaction_;
98 scoped_refptr<net::IOBuffer> buffer_; 97 scoped_refptr<net::IOBuffer> buffer_;
99 scoped_ptr<MockHttpRequest> request_; 98 scoped_ptr<MockHttpRequest> request_;
100 }; 99 };
101 100
102 TEST(DevToolsNetworkControllerTest, SingleDisableEnable) { 101 TEST(DevToolsNetworkControllerTest, SingleDisableEnable) {
103 DevToolsNetworkControllerHelper helper; 102 DevToolsNetworkControllerHelper helper;
104 DevToolsNetworkController* controller = helper.controller(); 103 DevToolsNetworkController* controller = helper.controller();
105 net::HttpRequestInfo* request = helper.GetRequest(); 104 helper.Start();
106 105
107 EXPECT_FALSE(controller->ShouldFail(request)); 106 EXPECT_FALSE(controller->ShouldFail(helper.transaction()));
108 helper.SetNetworkState(true); 107 helper.SetNetworkState(kClientId, true);
109 EXPECT_TRUE(controller->ShouldFail(request)); 108 EXPECT_TRUE(controller->ShouldFail(helper.transaction()));
110 helper.SetNetworkState(false); 109 helper.SetNetworkState(kClientId, false);
111 EXPECT_FALSE(controller->ShouldFail(request)); 110 EXPECT_FALSE(controller->ShouldFail(helper.transaction()));
111
112 base::RunLoop().RunUntilIdle();
113 }
114
115 TEST(DevToolsNetworkControllerTest, RealmIsolation) {
116 DevToolsNetworkControllerHelper helper;
117 DevToolsNetworkController* controller = helper.controller();
118 helper.Start();
119
120 EXPECT_FALSE(controller->ShouldFail(helper.transaction()));
121 helper.SetNetworkState(kAnotherClientId, true);
122 EXPECT_FALSE(controller->ShouldFail(helper.transaction()));
123 helper.SetNetworkState(kClientId, true);
124 EXPECT_TRUE(controller->ShouldFail(helper.transaction()));
125
126 helper.SetNetworkState(kAnotherClientId, false);
127 helper.SetNetworkState(kClientId, false);
128 base::RunLoop().RunUntilIdle();
112 } 129 }
113 130
114 TEST(DevToolsNetworkControllerTest, FailOnStart) { 131 TEST(DevToolsNetworkControllerTest, FailOnStart) {
115 DevToolsNetworkControllerHelper helper; 132 DevToolsNetworkControllerHelper helper;
116 helper.SetNetworkState(true); 133 helper.SetNetworkState(kClientId, true);
117 134
118 int rv = helper.Start(); 135 int rv = helper.Start();
119 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); 136 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED);
120 137
121 base::RunLoop().RunUntilIdle(); 138 base::RunLoop().RunUntilIdle();
122 EXPECT_EQ(helper.callback()->run_count(), 0); 139 EXPECT_EQ(helper.callback()->run_count(), 0);
140
141 helper.SetNetworkState(kClientId, false);
123 } 142 }
124 143
125 TEST(DevToolsNetworkControllerTest, FailRunningTransaction) { 144 TEST(DevToolsNetworkControllerTest, FailRunningTransaction) {
126 DevToolsNetworkControllerHelper helper; 145 DevToolsNetworkControllerHelper helper;
127 TestCallback* callback = helper.callback(); 146 TestCallback* callback = helper.callback();
128 147
129 int rv = helper.Start(); 148 int rv = helper.Start();
130 EXPECT_EQ(rv, net::OK); 149 EXPECT_EQ(rv, net::OK);
131 150
132 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); 151 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64));
133 rv = helper.Read(); 152 rv = helper.Read();
134 EXPECT_EQ(rv, net::ERR_IO_PENDING); 153 EXPECT_EQ(rv, net::ERR_IO_PENDING);
135 EXPECT_EQ(callback->run_count(), 0); 154 EXPECT_EQ(callback->run_count(), 0);
136 155
137 helper.SetNetworkState(true); 156 helper.SetNetworkState(kClientId, true);
138 EXPECT_EQ(callback->run_count(), 1); 157 EXPECT_EQ(callback->run_count(), 1);
139 EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED); 158 EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED);
140 159
141 // Wait until HttpTrancation completes reading and invokes callback. 160 // Wait until HttpTrancation completes reading and invokes callback.
142 // DevToolsNetworkTransaction should ignore callback, because it has 161 // DevToolsNetworkTransaction should ignore callback, because it has
143 // reported network error already. 162 // reported network error already.
144 base::RunLoop().RunUntilIdle(); 163 base::RunLoop().RunUntilIdle();
145 EXPECT_EQ(callback->run_count(), 1); 164 EXPECT_EQ(callback->run_count(), 1);
146 165
147 // Check that transaction in not failed second time. 166 // Check that transaction in not failed second time.
148 helper.SetNetworkState(false); 167 helper.SetNetworkState(kClientId, false);
149 helper.SetNetworkState(true); 168 helper.SetNetworkState(kClientId, true);
150 EXPECT_EQ(callback->run_count(), 1); 169 EXPECT_EQ(callback->run_count(), 1);
170
171 helper.SetNetworkState(kClientId, false);
151 } 172 }
152 173
153 TEST(DevToolsNetworkControllerTest, ReadAfterFail) { 174 TEST(DevToolsNetworkControllerTest, ReadAfterFail) {
154 DevToolsNetworkControllerHelper helper; 175 DevToolsNetworkControllerHelper helper;
155 176
156 int rv = helper.Start(); 177 int rv = helper.Start();
157 EXPECT_EQ(rv, net::OK); 178 EXPECT_EQ(rv, net::OK);
158 EXPECT_TRUE(helper.transaction()->request()); 179 EXPECT_TRUE(helper.transaction()->request());
159 180
160 helper.SetNetworkState(true); 181 helper.SetNetworkState(kClientId, true);
161 EXPECT_TRUE(helper.transaction()->failed()); 182 EXPECT_TRUE(helper.transaction()->failed());
162 183
163 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); 184 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64));
164 rv = helper.Read(); 185 rv = helper.Read();
165 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); 186 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED);
166 187
167 // Check that callback is never invoked. 188 // Check that callback is never invoked.
168 base::RunLoop().RunUntilIdle(); 189 base::RunLoop().RunUntilIdle();
169 EXPECT_EQ(helper.callback()->run_count(), 0); 190 EXPECT_EQ(helper.callback()->run_count(), 0);
191
192 helper.SetNetworkState(kClientId, false);
170 } 193 }
171 194
172 TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) { 195 TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) {
173 DevToolsNetworkControllerHelper helper; 196 DevToolsNetworkControllerHelper helper;
174 helper.mock_transaction()->request_headers = 197 helper.mock_transaction()->request_headers =
198 "X-DevTools-Emulate-Network-Conditions-Client-Id: 42\r\n"
175 "X-DevTools-Request-Initiator: frontend\r\n"; 199 "X-DevTools-Request-Initiator: frontend\r\n";
176 DevToolsNetworkController* controller = helper.controller(); 200 DevToolsNetworkController* controller = helper.controller();
177 net::HttpRequestInfo* request = helper.GetRequest();
178 201
179 EXPECT_FALSE(controller->ShouldFail(request)); 202 EXPECT_FALSE(controller->ShouldFail(helper.transaction()));
180 helper.SetNetworkState(true); 203 helper.SetNetworkState(kClientId, true);
181 EXPECT_FALSE(controller->ShouldFail(request)); 204 EXPECT_FALSE(controller->ShouldFail(helper.transaction()));
182 }
183 205
184 TEST(DevToolsNetworkControllerTest, AllowsNotMatchingRequests) { 206 helper.SetNetworkState(kClientId, false);
185 DevToolsNetworkControllerHelper helper;
186 helper.mock_transaction()->url = kHttpDotOrg;
187 DevToolsNetworkController* controller = helper.controller();
188 net::HttpRequestInfo* request = helper.GetRequest();
189
190 EXPECT_FALSE(controller->ShouldFail(request));
191 helper.SetNetworkState(true);
192 EXPECT_FALSE(controller->ShouldFail(request));
193 } 207 }
194 208
195 } // namespace test 209 } // namespace test
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698