devtools_network_controller_unittest.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <string> 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/ref_counted.h" 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/message_loop/message_loop.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/run_loop.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/devtools/devtools_network_conditions.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/devtools/devtools_network_controller.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/devtools/devtools_network_transaction.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "net/http/http_transaction_test_util.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "url/gurl.h" 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace test { 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kClientId[] = "42"; 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kAnotherClientId[] = "24"; 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kHttpDotCom[] = "http://dot.com"; 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kHttpDotOrg[] = "http://dot.org"; 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kCom[] = "com"; 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class TestCallback { 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestCallback() : run_count_(0), value_(0) {} 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void Run(int value) { 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) run_count_++; 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) value_ = value; 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int run_count() { return run_count_; } 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int value() { return value_; } 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int run_count_; 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int value_; 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkControllerHelper { 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper() : 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) completion_callback_( 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::Bind(&TestCallback::Run, base::Unretained(&callback_))), 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) mock_transaction_(kSimpleGET_Transaction), 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) buffer_(new net::IOBuffer(64)) { 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) mock_transaction_.test_mode = TEST_MODE_SYNC_NET_START; 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) mock_transaction_.url = kHttpDotCom; 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AddMockTransaction(&mock_transaction_); 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<net::HttpTransaction> network_transaction; 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) network_layer_.CreateTransaction( 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::DEFAULT_PRIORITY, &network_transaction); 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) transaction_.reset(new DevToolsNetworkTransaction( 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &controller_, network_transaction.Pass())); 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::HttpRequestInfo* GetRequest() { 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!request_) 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request_.reset(new MockHttpRequest(mock_transaction_)); 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return request_.get(); 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetNetworkState(const std::string& client_id, bool offline) { 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::vector<std::string> domains; 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) domains.push_back(kCom); 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<DevToolsNetworkConditions> conditions; 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (offline) 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) conditions = new DevToolsNetworkConditions(domains); 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller_.SetNetworkStateOnIO(client_id, conditions); 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int Start() { 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return transaction_->Start( 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetRequest(), completion_callback_, net::BoundNetLog()); 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int Read() { 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return transaction_->Read(buffer_.get(), 64, completion_callback_); 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ~DevToolsNetworkControllerHelper() { 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RemoveMockTransaction(&mock_transaction_); 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestCallback* callback() { return &callback_; } 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockTransaction* mock_transaction() { return &mock_transaction_; } 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController* controller() { return &controller_; } 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkTransaction* transaction() { return transaction_.get(); } 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::MessageLoop message_loop_; 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockNetworkLayer network_layer_; 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestCallback callback_; 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::CompletionCallback completion_callback_; 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockTransaction mock_transaction_; 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController controller_; 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<DevToolsNetworkTransaction> transaction_; 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<net::IOBuffer> buffer_; 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<MockHttpRequest> request_; 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(DevToolsNetworkControllerTest, SingleDisableEnable) { 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper helper; 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController* controller = helper.controller(); 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::HttpRequestInfo* request = helper.GetRequest(); 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(controller->ShouldFail(request)); 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, false); 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(DevToolsNetworkControllerTest, DoubleDisableEnable) { 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper helper; 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController* controller = helper.controller(); 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::HttpRequestInfo* request = helper.GetRequest(); 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(controller->ShouldFail(request)); 12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kAnotherClientId, true); 12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(controller->ShouldFail(request)); 12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, false); 12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(controller->ShouldFail(request)); 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kAnotherClientId, false); 13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(DevToolsNetworkControllerTest, FailOnStart) { 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper helper; 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int rv = helper.Start(); 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(helper.callback()->run_count(), 0); 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(DevToolsNetworkControllerTest, FailRunningTransaction) { 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper helper; 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestCallback* callback = helper.callback(); 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int rv = helper.Start(); 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(rv, net::OK); 15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) rv = helper.Read(); 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(rv, net::ERR_IO_PENDING); 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(callback->run_count(), 0); 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(callback->run_count(), 1); 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(callback->value(), net::ERR_INTERNET_DISCONNECTED); 15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Wait until HttpTrancation completes reading and invokes callback. 16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // DevToolsNetworkTransaction should ignore callback, because it has 16246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // reported network error already. 16346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(callback->run_count(), 1); 16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Check that transaction in not failed second time. 16746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, false); 16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(callback->run_count(), 1); 17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(DevToolsNetworkControllerTest, ReadAfterFail) { 17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper helper; 17446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int rv = helper.Start(); 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(rv, net::OK); 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(helper.transaction()->request()); 17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(helper.transaction()->failed()); 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(64)); 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) rv = helper.Read(); 18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(rv, net::ERR_INTERNET_DISCONNECTED); 18546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Check that callback is never invoked. 18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(helper.callback()->run_count(), 0); 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(DevToolsNetworkControllerTest, AllowsDevToolsRequests) { 19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper helper; 19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.mock_transaction()->request_headers = 19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "X-DevTools-Request-Initiator: frontend\r\n"; 19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController* controller = helper.controller(); 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::HttpRequestInfo* request = helper.GetRequest(); 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 20146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 20246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(DevToolsNetworkControllerTest, AllowsNotMatchingRequests) { 20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkControllerHelper helper; 20546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.mock_transaction()->url = kHttpDotOrg; 20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController* controller = helper.controller(); 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) net::HttpRequestInfo* request = helper.GetRequest(); 20846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 20946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 21046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) helper.SetNetworkState(kClientId, true); 21146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(controller->ShouldFail(request)); 21246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 21346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 21446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace test 215