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)#ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_CONTROLLER_H_ 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_CONTROLLER_H_ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <string> 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/containers/scoped_ptr_hash_map.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/macros.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/weak_ptr.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/threading/thread_checker.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkConditions; 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DevToolsNetworkInterceptor; 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkTransaction; 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace test { 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkControllerHelper; 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// DevToolsNetworkController tracks DevToolsNetworkTransactions. 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkController { 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController(); 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~DevToolsNetworkController(); 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Applies network emulation configuration. 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetNetworkState( 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& client_id, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<DevToolsNetworkConditions> conditions); 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::WeakPtr<DevToolsNetworkInterceptor> GetInterceptor( 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DevToolsNetworkTransaction* transaction); 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class test::DevToolsNetworkControllerHelper; 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Controller must be constructed on IO thread. 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ThreadChecker thread_checker_; 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetNetworkStateOnIO( 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& client_id, 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<DevToolsNetworkConditions> conditions); 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) typedef scoped_ptr<DevToolsNetworkInterceptor> Interceptor; 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptor default_interceptor_; 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptor appcache_interceptor_; 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) typedef base::ScopedPtrHashMap<std::string, DevToolsNetworkInterceptor> 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptors; 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptors interceptors_; 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WeakPtrFactory<DevToolsNetworkController> weak_ptr_factory_; 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkController); 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_CONTROLLER_H_ 63