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

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

Issue 182993003: Add the ability for DevTools to wrap network transactions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rename parameter Created 6 years, 8 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include <string>
6
7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h"
11 #include "chrome/browser/devtools/devtools_network_controller.h"
12 #include "chrome/browser/devtools/devtools_network_transaction.h"
13 #include "net/http/http_transaction_unittest.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "url/gurl.h"
16
17 namespace {
18
19 const char kClientId[] = "42";
20 const char kAnotherClientId[] = "24";
21
22 class TestCallback {
23 public:
24 TestCallback() : run_count_(0), value_(0) {}
25 void Run(int value) {
26 run_count_++;
27 value_ = value;
28 }
29 int run_count() { return run_count_; }
30 int value() { return value_; }
31
32 private:
33 int run_count_;
34 int value_;
35 };
36
37 class TransactionHelper {
38 public:
39 TransactionHelper() :
40 completion_callback_(
41 base::Bind(&TestCallback::Run, base::Unretained(&callback_))),
42 mock_transaction_(kSimpleGET_Transaction),
43 buffer_(new net::IOBuffer(64)) {
44 mock_transaction_.test_mode = TEST_MODE_SYNC_NET_START;
45 mock_transaction_.url = "http://dot.com";
46 AddMockTransaction(&mock_transaction_);
47
48 scoped_ptr<net::HttpTransaction> network_transaction;
49 network_layer_.CreateTransaction(
50 net::DEFAULT_PRIORITY, &network_transaction);
51 transaction_.reset(new DevToolsNetworkTransaction(
52 &controller_, network_transaction.Pass()));
53 }
54
55 net::HttpRequestInfo* GetRequest() {
56 if (!request_)
57 request_.reset(new MockHttpRequest(mock_transaction_));
58 return request_.get();
59 }
60
61 int Start() {
62 return transaction_->Start(
63 GetRequest(), completion_callback_, net::BoundNetLog());
64 }
65
66 int Read() {
67 return transaction_->Read(buffer_.get(), 64, completion_callback_);
68 }
69
70 ~TransactionHelper() {
71 RemoveMockTransaction(&mock_transaction_);
72 }
73
74 TestCallback* callback() { return &callback_; }
75 MockTransaction* mock_transaction() { return &mock_transaction_; }
76 DevToolsNetworkController* controller() { return &controller_; }
77 DevToolsNetworkTransaction* transaction() { return transaction_.get(); }
78
79 private:
80 base::MessageLoop message_loop_;
81 MockNetworkLayer network_layer_;
82 TestCallback callback_;
83 net::CompletionCallback completion_callback_;
84 MockTransaction mock_transaction_;
85 DevToolsNetworkController controller_;
86 scoped_ptr<DevToolsNetworkTransaction> transaction_;
87 scoped_refptr<net::IOBuffer> buffer_;
88 scoped_ptr<MockHttpRequest> request_;
89 };
90
91 TEST(DevToolsNetworkControllerTest, SingleDisableEnable) {
92 TransactionHelper helper;
93 DevToolsNetworkController* controller = helper.controller();
94 net::HttpRequestInfo* request = helper.GetRequest();
95
96 EXPECT_FALSE(controller->ShouldFail(request));
97 controller->DisableNetwork(kClientId, true);
98 EXPECT_TRUE(controller->ShouldFail(request));
99 controller->DisableNetwork(kClientId, false);
100 EXPECT_FALSE(controller->ShouldFail(request));
101 }
102
103 TEST(DevToolsNetworkControllerTest, DoubleDisableEnable) {
104 TransactionHelper helper;
105 DevToolsNetworkController* controller = helper.controller();
106 net::HttpRequestInfo* request = helper.GetRequest();
107
108 EXPECT_FALSE(controller->ShouldFail(request));
109 controller->DisableNetwork(kClientId, true);
110 EXPECT_TRUE(controller->ShouldFail(request));
111 controller->DisableNetwork(kAnotherClientId, true);
112 EXPECT_TRUE(controller->ShouldFail(request));
113 controller->DisableNetwork(kClientId, false);
114 EXPECT_TRUE(controller->ShouldFail(request));
115 controller->DisableNetwork(kAnotherClientId, false);
116 EXPECT_FALSE(controller->ShouldFail(request));
117 }
118
119 TEST(DevToolsNetworkControllerTest, FailOnStart) {
120 TransactionHelper helper;
121 helper.controller()->DisableNetwork(kClientId, true);
122
123 int rv = helper.Start();
124 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED);
125
126 base::RunLoop().RunUntilIdle();
127 EXPECT_EQ(helper.callback()->run_count(), 0);
128 }
129
130 TEST(DevToolsNetworkControllerTest, FailRunningTransaction) {
131 TransactionHelper helper;
132 DevToolsNetworkController* controller = helper.controller();
133 TestCallback* callback = helper.callback();
134
135 int rv = helper.Start();
136 EXPECT_EQ(rv, net::OK);
137
138 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64));
139 rv = helper.Read();
140 EXPECT_EQ(rv, net::ERR_IO_PENDING);
141 EXPECT_EQ(callback->run_count(), 0);
142
143 controller->DisableNetwork(kClientId, true);
144 EXPECT_EQ(callback->run_count(), 1);
145 EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED);
146
147 // Wait until HttpTrancation completes reading and invokes callback.
148 // DevToolsNetworkTransaction should ignore callback, because it has
149 // reported network error already.
150 base::RunLoop().RunUntilIdle();
151 EXPECT_EQ(callback->run_count(), 1);
152
153 // Check that transaction in not failed second time.
154 controller->DisableNetwork(kClientId, false);
155 controller->DisableNetwork(kClientId, true);
156 EXPECT_EQ(callback->run_count(), 1);
157 }
158
159 TEST(DevToolsNetworkControllerTest, ReadAfterFail) {
160 TransactionHelper helper;
161
162 int rv = helper.Start();
163 EXPECT_EQ(rv, net::OK);
164 EXPECT_TRUE(helper.transaction()->request());
165
166 helper.controller()->DisableNetwork(kClientId, true);
167 EXPECT_TRUE(helper.transaction()->failed());
168
169 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64));
170 rv = helper.Read();
171 EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED);
172
173 // Check that callback is never invoked.
174 base::RunLoop().RunUntilIdle();
175 EXPECT_EQ(helper.callback()->run_count(), 0);
176 }
177
178 TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) {
179 TransactionHelper helper;
180 helper.mock_transaction()->request_headers =
181 "X-DevTools-Request-Initiator: frontend\r\n";
182 DevToolsNetworkController* controller = helper.controller();
183 net::HttpRequestInfo* request = helper.GetRequest();
184
185 EXPECT_FALSE(controller->ShouldFail(request));
186 controller->DisableNetwork(kClientId, true);
187 EXPECT_FALSE(controller->ShouldFail(request));
188 }
189
190 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698