OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ | 5 #ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ |
6 #define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ | 6 #define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 DEVTOOLS_DOCK_SIDE_BOTTOM, | 50 DEVTOOLS_DOCK_SIDE_BOTTOM, |
51 DEVTOOLS_DOCK_SIDE_RIGHT, | 51 DEVTOOLS_DOCK_SIDE_RIGHT, |
52 DEVTOOLS_DOCK_SIDE_MINIMIZED | 52 DEVTOOLS_DOCK_SIDE_MINIMIZED |
53 }; | 53 }; |
54 | 54 |
55 class DevToolsWindow : private content::NotificationObserver, | 55 class DevToolsWindow : private content::NotificationObserver, |
56 private content::WebContentsDelegate, | 56 private content::WebContentsDelegate, |
57 private content::DevToolsFrontendHostDelegate { | 57 private content::DevToolsFrontendHostDelegate { |
58 public: | 58 public: |
59 static const char kDevToolsApp[]; | 59 static const char kDevToolsApp[]; |
| 60 |
| 61 virtual ~DevToolsWindow(); |
| 62 |
60 static std::string GetDevToolsWindowPlacementPrefKey(); | 63 static std::string GetDevToolsWindowPlacementPrefKey(); |
61 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | 64 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
62 static DevToolsWindow* GetDockedInstanceForInspectedTab( | 65 static DevToolsWindow* GetDockedInstanceForInspectedTab( |
63 content::WebContents* inspected_tab); | 66 content::WebContents* inspected_tab); |
64 static bool IsDevToolsWindow(content::RenderViewHost* window_rvh); | 67 static bool IsDevToolsWindow(content::RenderViewHost* window_rvh); |
65 | |
66 static DevToolsWindow* OpenDevToolsWindowForWorker( | 68 static DevToolsWindow* OpenDevToolsWindowForWorker( |
67 Profile* profile, | 69 Profile* profile, |
68 content::DevToolsAgentHost* worker_agent); | 70 content::DevToolsAgentHost* worker_agent); |
69 static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); | 71 static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); |
70 static DevToolsWindow* OpenDevToolsWindow( | 72 static DevToolsWindow* OpenDevToolsWindow( |
71 content::RenderViewHost* inspected_rvh); | 73 content::RenderViewHost* inspected_rvh); |
72 static DevToolsWindow* ToggleDevToolsWindow( | 74 static DevToolsWindow* ToggleDevToolsWindow( |
73 Browser* browser, | 75 Browser* browser, |
74 DevToolsToggleAction action); | 76 DevToolsToggleAction action); |
75 static void OpenExternalFrontend(Profile* profile, | 77 static void OpenExternalFrontend(Profile* profile, |
76 const std::string& frontend_uri, | 78 const std::string& frontend_uri, |
77 content::DevToolsAgentHost* agent_host); | 79 content::DevToolsAgentHost* agent_host); |
78 | 80 |
79 // Exposed for testing, normal clients should not use this method. | 81 // Exposed for testing, normal clients should not use this method. |
80 static DevToolsWindow* ToggleDevToolsWindow( | 82 static DevToolsWindow* ToggleDevToolsWindow( |
81 content::RenderViewHost* inspected_rvh, | 83 content::RenderViewHost* inspected_rvh, |
82 bool force_open, | 84 bool force_open, |
83 DevToolsToggleAction action); | 85 DevToolsToggleAction action); |
84 static void InspectElement( | 86 static void InspectElement( |
85 content::RenderViewHost* inspected_rvh, int x, int y); | 87 content::RenderViewHost* inspected_rvh, int x, int y); |
86 | 88 |
87 virtual ~DevToolsWindow(); | 89 static int GetMinimumWidth(); |
| 90 static int GetMinimumHeight(); |
| 91 static int GetMinimizedHeight(); |
88 | 92 |
89 // Overridden from DevToolsClientHost. | 93 // Overridden from DevToolsClientHost. |
90 virtual void InspectedContentsClosing() OVERRIDE; | 94 virtual void InspectedContentsClosing() OVERRIDE; |
91 content::RenderViewHost* GetRenderViewHost(); | |
92 | |
93 void Show(DevToolsToggleAction action); | |
94 | 95 |
95 content::WebContents* web_contents() { return web_contents_; } | 96 content::WebContents* web_contents() { return web_contents_; } |
96 Browser* browser() { return browser_; } // For tests. | 97 Browser* browser() { return browser_; } // For tests. |
97 DevToolsDockSide dock_side() { return dock_side_; } | 98 DevToolsDockSide dock_side() { return dock_side_; } |
98 | 99 |
| 100 content::RenderViewHost* GetRenderViewHost(); |
99 content::DevToolsClientHost* GetDevToolsClientHostForTest(); | 101 content::DevToolsClientHost* GetDevToolsClientHostForTest(); |
100 | 102 |
101 // Returns preferred devtools window width for given |container_width|. It | 103 // Returns preferred devtools window width for given |container_width|. It |
102 // tries to use the saved window width, or, if none exists, 1/3 of the | 104 // tries to use the saved window width, or, if none exists, 1/3 of the |
103 // container width, then clamps to try and ensure both devtools and content | 105 // container width, then clamps to try and ensure both devtools and content |
104 // are at least somewhat visible. | 106 // are at least somewhat visible. |
105 // Called only for the case when devtools window is docked to the side. | 107 // Called only for the case when devtools window is docked to the side. |
106 int GetWidth(int container_width); | 108 int GetWidth(int container_width); |
107 | 109 |
108 // Returns preferred devtools window height for given |container_height|. | 110 // Returns preferred devtools window height for given |container_height|. |
109 // Uses the same logic as GetWidth. | 111 // Uses the same logic as GetWidth. |
110 // Called only for the case when devtools window is docked to bottom. | 112 // Called only for the case when devtools window is docked to bottom. |
111 int GetHeight(int container_height); | 113 int GetHeight(int container_height); |
112 | 114 |
113 // Returns the minimum width devtools window needs. | |
114 int GetMinimumWidth(); | |
115 | |
116 // Returns the minimum height devtools window needs. | |
117 int GetMinimumHeight(); | |
118 | |
119 // Stores preferred devtools window width for this instance. | 115 // Stores preferred devtools window width for this instance. |
120 void SetWidth(int width); | 116 void SetWidth(int width); |
121 | 117 |
122 // Stores preferred devtools window height for this instance. | 118 // Stores preferred devtools window height for this instance. |
123 void SetHeight(int height); | 119 void SetHeight(int height); |
124 | 120 |
125 // Returns the height in minimized mode. | 121 void Show(DevToolsToggleAction action); |
126 int GetMinimizedHeight(); | |
127 | 122 |
128 private: | 123 private: |
129 friend class DevToolsControllerTest; | 124 friend class DevToolsControllerTest; |
| 125 |
| 126 DevToolsWindow(Profile* profile, |
| 127 const GURL& frontend_url, |
| 128 content::RenderViewHost* inspected_rvh, |
| 129 DevToolsDockSide dock_side); |
| 130 |
130 static DevToolsWindow* Create(Profile* profile, | 131 static DevToolsWindow* Create(Profile* profile, |
131 const GURL& frontend_url, | 132 const GURL& frontend_url, |
132 content::RenderViewHost* inspected_rvh, | 133 content::RenderViewHost* inspected_rvh, |
133 DevToolsDockSide dock_side, | 134 DevToolsDockSide dock_side, |
134 bool shared_worker_frontend); | 135 bool shared_worker_frontend); |
135 DevToolsWindow(Profile* profile, | 136 static GURL GetDevToolsURL(Profile* profile, |
136 const GURL& frontend_url, | 137 const GURL& base_url, |
137 content::RenderViewHost* inspected_rvh, | 138 DevToolsDockSide dock_side, |
138 DevToolsDockSide dock_side); | 139 bool shared_worker_frontend); |
139 | 140 static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*); |
140 void CreateDevToolsBrowser(); | 141 static DevToolsWindow* AsDevToolsWindow(content::RenderViewHost*); |
141 bool FindInspectedBrowserAndTabIndex(Browser**, int* tab); | 142 static DevToolsDockSide GetDockSideFromPrefs(Profile* profile); |
142 BrowserWindow* GetInspectedBrowserWindow(); | 143 static std::string SideToString(DevToolsDockSide dock_side); |
143 bool IsInspectedBrowserPopup(); | 144 static DevToolsDockSide SideFromString(const std::string& dock_side); |
144 void UpdateFrontendDockSide(); | |
145 void Hide(); | |
146 | 145 |
147 // Overridden from content::NotificationObserver. | 146 // Overridden from content::NotificationObserver. |
148 virtual void Observe(int type, | 147 virtual void Observe(int type, |
149 const content::NotificationSource& source, | 148 const content::NotificationSource& source, |
150 const content::NotificationDetails& details) OVERRIDE; | 149 const content::NotificationDetails& details) OVERRIDE; |
151 | 150 |
152 void ScheduleAction(DevToolsToggleAction action); | |
153 void DoAction(); | |
154 static GURL GetDevToolsURL(Profile* profile, | |
155 const GURL& base_url, | |
156 DevToolsDockSide dock_side, | |
157 bool shared_worker_frontend); | |
158 void UpdateTheme(); | |
159 void AddDevToolsExtensionsToClient(); | |
160 void CallClientFunction(const std::string& function_name, | |
161 const base::Value* arg1 = NULL, | |
162 const base::Value* arg2 = NULL); | |
163 // Overridden from content::WebContentsDelegate. | 151 // Overridden from content::WebContentsDelegate. |
164 virtual content::WebContents* OpenURLFromTab( | 152 virtual content::WebContents* OpenURLFromTab( |
165 content::WebContents* source, | 153 content::WebContents* source, |
166 const content::OpenURLParams& params) OVERRIDE; | 154 const content::OpenURLParams& params) OVERRIDE; |
167 virtual void AddNewContents(content::WebContents* source, | 155 virtual void AddNewContents(content::WebContents* source, |
168 content::WebContents* new_contents, | 156 content::WebContents* new_contents, |
169 WindowOpenDisposition disposition, | 157 WindowOpenDisposition disposition, |
170 const gfx::Rect& initial_pos, | 158 const gfx::Rect& initial_pos, |
171 bool user_gesture, | 159 bool user_gesture, |
172 bool* was_blocked) OVERRIDE; | 160 bool* was_blocked) OVERRIDE; |
173 virtual void CloseContents(content::WebContents* source) OVERRIDE {} | 161 virtual void CloseContents(content::WebContents* source) OVERRIDE; |
174 virtual bool PreHandleKeyboardEvent( | 162 virtual bool PreHandleKeyboardEvent( |
175 content::WebContents* source, | 163 content::WebContents* source, |
176 const content::NativeWebKeyboardEvent& event, | 164 const content::NativeWebKeyboardEvent& event, |
177 bool* is_keyboard_shortcut) OVERRIDE; | 165 bool* is_keyboard_shortcut) OVERRIDE; |
178 virtual void HandleKeyboardEvent( | 166 virtual void HandleKeyboardEvent( |
179 content::WebContents* source, | 167 content::WebContents* source, |
180 const content::NativeWebKeyboardEvent& event) OVERRIDE; | 168 const content::NativeWebKeyboardEvent& event) OVERRIDE; |
181 virtual content::JavaScriptDialogManager* | 169 virtual content::JavaScriptDialogManager* |
182 GetJavaScriptDialogManager() OVERRIDE; | 170 GetJavaScriptDialogManager() OVERRIDE; |
183 virtual content::ColorChooser* OpenColorChooser( | 171 virtual content::ColorChooser* OpenColorChooser( |
184 content::WebContents* web_contents, | 172 content::WebContents* web_contents, |
185 SkColor color) OVERRIDE; | 173 SkColor color) OVERRIDE; |
186 virtual void RunFileChooser( | 174 virtual void RunFileChooser( |
187 content::WebContents* web_contents, | 175 content::WebContents* web_contents, |
188 const content::FileChooserParams& params) OVERRIDE; | 176 const content::FileChooserParams& params) OVERRIDE; |
189 virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE; | 177 virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE; |
190 | 178 |
191 static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*); | |
192 static DevToolsWindow* AsDevToolsWindow(content::RenderViewHost*); | |
193 | |
194 // content::DevToolsFrontendHostDelegate overrides. | 179 // content::DevToolsFrontendHostDelegate overrides. |
195 virtual void ActivateWindow() OVERRIDE; | 180 virtual void ActivateWindow() OVERRIDE; |
196 virtual void ChangeAttachedWindowHeight(unsigned height) OVERRIDE; | 181 virtual void ChangeAttachedWindowHeight(unsigned height) OVERRIDE; |
197 virtual void CloseWindow() OVERRIDE; | 182 virtual void CloseWindow() OVERRIDE; |
198 virtual void MoveWindow(int x, int y) OVERRIDE; | 183 virtual void MoveWindow(int x, int y) OVERRIDE; |
199 virtual void SetDockSide(const std::string& side) OVERRIDE; | 184 virtual void SetDockSide(const std::string& side) OVERRIDE; |
200 virtual void OpenInNewTab(const std::string& url) OVERRIDE; | 185 virtual void OpenInNewTab(const std::string& url) OVERRIDE; |
201 virtual void SaveToFile(const std::string& url, | 186 virtual void SaveToFile(const std::string& url, |
202 const std::string& content, | 187 const std::string& content, |
203 bool save_as) OVERRIDE; | 188 bool save_as) OVERRIDE; |
204 virtual void AppendToFile(const std::string& url, | 189 virtual void AppendToFile(const std::string& url, |
205 const std::string& content) OVERRIDE; | 190 const std::string& content) OVERRIDE; |
206 virtual void RequestFileSystems() OVERRIDE; | 191 virtual void RequestFileSystems() OVERRIDE; |
207 virtual void AddFileSystem() OVERRIDE; | 192 virtual void AddFileSystem() OVERRIDE; |
208 virtual void RemoveFileSystem(const std::string& file_system_path) OVERRIDE; | 193 virtual void RemoveFileSystem(const std::string& file_system_path) OVERRIDE; |
209 | 194 |
210 // DevToolsFileHelper callbacks. | 195 // DevToolsFileHelper callbacks. |
211 void FileSavedAs(const std::string& url); | 196 void FileSavedAs(const std::string& url); |
212 void AppendedTo(const std::string& url); | 197 void AppendedTo(const std::string& url); |
213 void FileSystemsLoaded( | 198 void FileSystemsLoaded( |
214 const std::vector<DevToolsFileHelper::FileSystem>& file_systems); | 199 const std::vector<DevToolsFileHelper::FileSystem>& file_systems); |
| 200 void FileSystemAdded(const DevToolsFileHelper::FileSystem& file_system); |
215 void ShowDevToolsConfirmInfoBar( | 201 void ShowDevToolsConfirmInfoBar( |
216 const string16& message, | 202 const string16& message, |
217 const base::Callback<void(bool)>& callback); | 203 const base::Callback<void(bool)>& callback); |
218 void FileSystemAdded(const DevToolsFileHelper::FileSystem& file_system); | |
219 | 204 |
| 205 void CreateDevToolsBrowser(); |
| 206 bool FindInspectedBrowserAndTabIndex(Browser**, int* tab); |
| 207 BrowserWindow* GetInspectedBrowserWindow(); |
| 208 bool IsInspectedBrowserPopup(); |
| 209 void UpdateFrontendDockSide(); |
| 210 void Hide(); |
| 211 void ScheduleAction(DevToolsToggleAction action); |
| 212 void DoAction(); |
| 213 void UpdateTheme(); |
| 214 void AddDevToolsExtensionsToClient(); |
| 215 void CallClientFunction(const std::string& function_name, |
| 216 const base::Value* arg1 = NULL, |
| 217 const base::Value* arg2 = NULL); |
220 void UpdateBrowserToolbar(); | 218 void UpdateBrowserToolbar(); |
221 bool IsDocked(); | 219 bool IsDocked(); |
222 void Restore(); | 220 void Restore(); |
223 static DevToolsDockSide GetDockSideFromPrefs(Profile* profile); | |
224 static std::string SideToString(DevToolsDockSide dock_side); | |
225 static DevToolsDockSide SideFromString(const std::string& dock_side); | |
226 | |
227 content::WebContents* GetInspectedWebContents(); | 221 content::WebContents* GetInspectedWebContents(); |
228 | 222 |
229 class InspectedWebContentsObserver; | 223 class InspectedWebContentsObserver; |
230 scoped_ptr<InspectedWebContentsObserver> inspected_contents_observer_; | 224 scoped_ptr<InspectedWebContentsObserver> inspected_contents_observer_; |
231 class FrontendWebContentsObserver; | 225 class FrontendWebContentsObserver; |
232 scoped_ptr<FrontendWebContentsObserver> frontend_contents_observer_; | 226 scoped_ptr<FrontendWebContentsObserver> frontend_contents_observer_; |
233 | 227 |
234 Profile* profile_; | 228 Profile* profile_; |
235 content::WebContents* web_contents_; | 229 content::WebContents* web_contents_; |
236 Browser* browser_; | 230 Browser* browser_; |
237 DevToolsDockSide dock_side_; | 231 DevToolsDockSide dock_side_; |
238 bool is_loaded_; | 232 bool is_loaded_; |
239 DevToolsToggleAction action_on_load_; | 233 DevToolsToggleAction action_on_load_; |
240 content::NotificationRegistrar registrar_; | 234 content::NotificationRegistrar registrar_; |
241 scoped_ptr<content::DevToolsClientHost> frontend_host_; | 235 scoped_ptr<content::DevToolsClientHost> frontend_host_; |
242 base::WeakPtrFactory<DevToolsWindow> weak_factory_; | 236 base::WeakPtrFactory<DevToolsWindow> weak_factory_; |
243 scoped_ptr<DevToolsFileHelper> file_helper_; | 237 scoped_ptr<DevToolsFileHelper> file_helper_; |
244 int width_; | 238 int width_; |
245 int height_; | 239 int height_; |
246 DevToolsDockSide dock_side_before_minimized_; | 240 DevToolsDockSide dock_side_before_minimized_; |
247 DISALLOW_COPY_AND_ASSIGN(DevToolsWindow); | 241 DISALLOW_COPY_AND_ASSIGN(DevToolsWindow); |
248 }; | 242 }; |
249 | 243 |
250 #endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ | 244 #endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ |
OLD | NEW |