inspect_ui.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_WEBUI_INSPECT_UI_H_
6#define CHROME_BROWSER_UI_WEBUI_INSPECT_UI_H_
7
8#include <map>
9
10#include "base/memory/ref_counted.h"
11#include "base/memory/weak_ptr.h"
12#include "base/prefs/pref_change_registrar.h"
13#include "content/public/browser/notification_observer.h"
14#include "content/public/browser/notification_registrar.h"
15#include "content/public/browser/web_ui_controller.h"
16#include "content/public/browser/web_ui_data_source.h"
17
18namespace base {
19class Value;
20class ListValue;
21}
22
23class Browser;
24class DevToolsTargetsUIHandler;
25class DevToolsTargetImpl;
26class PortForwardingStatusSerializer;
27
28class InspectUI : public content::WebUIController,
29                  public content::NotificationObserver {
30 public:
31  explicit InspectUI(content::WebUI* web_ui);
32  virtual ~InspectUI();
33
34  void InitUI();
35  void Inspect(const std::string& source_id, const std::string& target_id);
36  void Activate(const std::string& source_id, const std::string& target_id);
37  void Close(const std::string& source_id, const std::string& target_id);
38  void Reload(const std::string& source_id, const std::string& target_id);
39  void Open(const std::string& source_id,
40            const std::string& browser_id,
41            const std::string& url);
42  void InspectBrowserWithCustomFrontend(
43      const std::string& source_id,
44      const std::string& browser_id,
45      const GURL& frontend_url);
46
47  static void InspectDevices(Browser* browser);
48
49 private:
50  // content::NotificationObserver overrides.
51  virtual void Observe(int type,
52                       const content::NotificationSource& source,
53                       const content::NotificationDetails& details) OVERRIDE;
54
55  void StartListeningNotifications();
56  void StopListeningNotifications();
57
58  content::WebUIDataSource* CreateInspectUIHTMLSource();
59
60  void UpdateDiscoverUsbDevicesEnabled();
61  void UpdatePortForwardingEnabled();
62  void UpdatePortForwardingConfig();
63
64  void SetPortForwardingDefaults();
65
66  const base::Value* GetPrefValue(const char* name);
67
68  void AddTargetUIHandler(
69      scoped_ptr<DevToolsTargetsUIHandler> handler);
70
71  DevToolsTargetsUIHandler* FindTargetHandler(
72      const std::string& source_id);
73  DevToolsTargetImpl* FindTarget(const std::string& source_id,
74                                 const std::string& target_id);
75
76  void PopulateTargets(const std::string& source_id,
77                       const base::ListValue& targets);
78
79  void ForceUpdateIfNeeded(const std::string& source_id,
80                           const std::string& target_type);
81
82  void PopulatePortStatus(const base::Value& status);
83
84  void ShowIncognitoWarning();
85
86  // A scoped container for notification registries.
87  content::NotificationRegistrar notification_registrar_;
88
89  // A scoped container for preference change registries.
90  PrefChangeRegistrar pref_change_registrar_;
91
92  typedef std::map<std::string, DevToolsTargetsUIHandler*> TargetHandlerMap;
93  TargetHandlerMap target_handlers_;
94
95  scoped_ptr<PortForwardingStatusSerializer> port_status_serializer_;
96
97  DISALLOW_COPY_AND_ASSIGN(InspectUI);
98};
99
100#endif  // CHROME_BROWSER_UI_WEBUI_INSPECT_UI_H_
101