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