10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_PORT_FORWARDING_CONTROLLER_H_
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define CHROME_BROWSER_DEVTOOLS_DEVICE_PORT_FORWARDING_CONTROLLER_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <map>
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/prefs/pref_change_registrar.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/devtools/device/devtools_android_bridge.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PrefService;
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass Profile;
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass PortForwardingController {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef DevToolsAndroidBridge::PortStatus PortStatus;
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef DevToolsAndroidBridge::PortStatusMap PortStatusMap;
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef DevToolsAndroidBridge::DevicesStatus DevicesStatus;
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  explicit PortForwardingController(Profile* profile);
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual ~PortForwardingController();
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DevicesStatus DeviceListChanged(
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const DevToolsAndroidBridge::RemoteDevices& devices);
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  class Connection;
33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  typedef std::map<std::string, Connection*> Registry;
34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnPrefsChange();
36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void UpdateConnections();
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Profile* profile_;
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  PrefService* pref_service_;
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  PrefChangeRegistrar pref_change_registrar_;
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Registry registry_;
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  typedef std::map<int, std::string> ForwardingMap;
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ForwardingMap forwarding_map_;
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PortForwardingController);
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_PORT_FORWARDING_CONTROLLER_H_
51