15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_INSPECT_UI_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_INSPECT_UI_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h"
122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "base/prefs/pref_change_registrar.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui_controller.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_ui_data_source.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace base {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class Value;
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ListValue;
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class Browser;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DevToolsTargetsUIHandler;
255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass DevToolsTargetImpl;
26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass PortForwardingStatusSerializer;
278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InspectUI : public content::WebUIController,
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  public content::NotificationObserver {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit InspectUI(content::WebUI* web_ui);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~InspectUI();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  void InitUI();
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Inspect(const std::string& source_id, const std::string& target_id);
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Activate(const std::string& source_id, const std::string& target_id);
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Close(const std::string& source_id, const std::string& target_id);
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Reload(const std::string& source_id, const std::string& target_id);
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Open(const std::string& source_id,
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            const std::string& browser_id,
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            const std::string& url);
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void InspectBrowserWithCustomFrontend(
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const std::string& source_id,
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const std::string& browser_id,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const GURL& frontend_url);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  static void InspectDevices(Browser* browser);
488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::NotificationObserver overrides.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  void StartListeningNotifications();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StopListeningNotifications();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebUIDataSource* CreateInspectUIHTMLSource();
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void UpdateDiscoverUsbDevicesEnabled();
612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void UpdatePortForwardingEnabled();
622385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void UpdatePortForwardingConfig();
632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void SetPortForwardingDefaults();
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const base::Value* GetPrefValue(const char* name);
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AddTargetUIHandler(
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      scoped_ptr<DevToolsTargetsUIHandler> handler);
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  DevToolsTargetsUIHandler* FindTargetHandler(
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const std::string& source_id);
735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  DevToolsTargetImpl* FindTarget(const std::string& source_id,
745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                 const std::string& target_id);
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void PopulateTargets(const std::string& source_id,
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                       const base::ListValue& targets);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void ForceUpdateIfNeeded(const std::string& source_id,
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           const std::string& target_type);
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void PopulatePortStatus(const base::Value& status);
83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void ShowIncognitoWarning();
85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A scoped container for notification registries.
872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  content::NotificationRegistrar notification_registrar_;
882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // A scoped container for preference change registries.
902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  PrefChangeRegistrar pref_change_registrar_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  typedef std::map<std::string, DevToolsTargetsUIHandler*> TargetHandlerMap;
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TargetHandlerMap target_handlers_;
94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
95a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  scoped_ptr<PortForwardingStatusSerializer> port_status_serializer_;
96a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InspectUI);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_INSPECT_UI_H_
101