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