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 18 namespace base { 19 class Value; 20 class ListValue; 21 } 22 23 class Browser; 24 class DevToolsTargetsUIHandler; 25 class DevToolsTargetImpl; 26 class PortForwardingStatusSerializer; 27 28 class 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