devtools_network_controller.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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/ref_counted.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/weak_ptr.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/threading/thread_checker.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkConditions; 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DevToolsNetworkInterceptor; 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkTransaction; 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace test { 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkControllerHelper; 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// DevToolsNetworkController tracks DevToolsNetworkTransactions. 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkController { 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DevToolsNetworkController(); 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~DevToolsNetworkController(); 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Applies network emulation configuration. 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetNetworkState( 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& client_id, 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const scoped_refptr<DevToolsNetworkConditions> conditions); 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::WeakPtr<DevToolsNetworkInterceptor> GetInterceptor( 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DevToolsNetworkTransaction* transaction); 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) friend class test::DevToolsNetworkControllerHelper; 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Controller must be constructed on IO thread. 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ThreadChecker thread_checker_; 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetNetworkStateOnIO( 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& client_id, 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const scoped_refptr<DevToolsNetworkConditions> conditions); 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) typedef scoped_ptr<DevToolsNetworkInterceptor> Interceptor; 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptor default_interceptor_; 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptor appcache_interceptor_; 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) typedef base::ScopedPtrHashMap<std::string, DevToolsNetworkInterceptor> 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptors; 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Interceptors interceptors_; 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WeakPtrFactory<DevToolsNetworkController> weak_ptr_factory_; 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DevToolsNetworkController); 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_NETWORK_CONTROLLER_H_ 64