| 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 |