devtools_network_controller.h revision 116680a4aac90f2aa7413d9095a592090648e557
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