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> | |
9 #include <vector> | |
10 | |
11 #include "base/basictypes.h" | |
12 #include "base/memory/scoped_ptr.h" | |
13 #include "base/memory/weak_ptr.h" | |
14 #include "base/strings/string16.h" | |
15 #include "chrome/browser/devtools/device/devtools_android_bridge.h" | |
16 #include "chrome/browser/devtools/devtools_contents_resizing_strategy.h" | 8 #include "chrome/browser/devtools/devtools_contents_resizing_strategy.h" |
17 #include "chrome/browser/devtools/devtools_embedder_message_dispatcher.h" | |
18 #include "chrome/browser/devtools/devtools_file_helper.h" | |
19 #include "chrome/browser/devtools/devtools_file_system_indexer.h" | |
20 #include "chrome/browser/devtools/devtools_targets_ui.h" | |
21 #include "chrome/browser/devtools/devtools_toggle_action.h" | 9 #include "chrome/browser/devtools/devtools_toggle_action.h" |
22 #include "content/public/browser/devtools_client_host.h" | 10 #include "chrome/browser/devtools/devtools_window_base.h" |
23 #include "content/public/browser/devtools_frontend_host_delegate.h" | |
24 #include "content/public/browser/notification_observer.h" | |
25 #include "content/public/browser/notification_registrar.h" | |
26 #include "content/public/browser/web_contents_delegate.h" | 11 #include "content/public/browser/web_contents_delegate.h" |
27 #include "ui/gfx/size.h" | |
28 | 12 |
29 class Browser; | 13 class Browser; |
30 class BrowserWindow; | 14 class BrowserWindow; |
31 class DevToolsControllerTest; | 15 class DevToolsControllerTest; |
32 class DevToolsEventForwarder; | 16 class DevToolsEventForwarder; |
33 class Profile; | |
34 | |
35 namespace base { | |
36 class Value; | |
37 } | |
38 | 17 |
39 namespace content { | 18 namespace content { |
40 class DevToolsAgentHost; | 19 class DevToolsAgentHost; |
41 class DevToolsClientHost; | |
42 struct FileChooserParams; | |
43 struct NativeWebKeyboardEvent; | 20 struct NativeWebKeyboardEvent; |
44 class RenderViewHost; | 21 class RenderViewHost; |
45 class WebContents; | |
46 } | |
47 | |
48 namespace IPC { | |
49 class Message; | |
50 } | 22 } |
51 | 23 |
52 namespace user_prefs { | 24 namespace user_prefs { |
53 class PrefRegistrySyncable; | 25 class PrefRegistrySyncable; |
54 } | 26 } |
55 | 27 |
56 class DevToolsWindow : private content::NotificationObserver, | 28 class DevToolsWindow : public DevToolsWindowBase, |
57 private content::WebContentsDelegate, | 29 public content::WebContentsDelegate { |
58 private content::DevToolsFrontendHostDelegate, | |
59 private DevToolsEmbedderMessageDispatcher::Delegate, | |
60 private DevToolsAndroidBridge::DeviceCountListener { | |
61 public: | 30 public: |
62 typedef base::Callback<void(bool)> InfoBarCallback; | |
63 | |
64 static const char kDevToolsApp[]; | 31 static const char kDevToolsApp[]; |
65 | 32 |
66 virtual ~DevToolsWindow(); | 33 virtual ~DevToolsWindow(); |
67 | 34 |
68 static std::string GetDevToolsWindowPlacementPrefKey(); | 35 static std::string GetDevToolsWindowPlacementPrefKey(); |
69 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | 36 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
70 | 37 |
71 // Return the DevToolsWindow for the given RenderViewHost if one exists, | 38 // Return the DevToolsWindow for the given RenderViewHost if one exists, |
72 // otherwise NULL. | 39 // otherwise NULL. |
73 static DevToolsWindow* GetInstanceForInspectedRenderViewHost( | 40 static DevToolsWindow* GetInstanceForInspectedRenderViewHost( |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 content::DevToolsAgentHost* agent_host); | 82 content::DevToolsAgentHost* agent_host); |
116 | 83 |
117 // Worker frontend is always undocked. | 84 // Worker frontend is always undocked. |
118 static DevToolsWindow* OpenDevToolsWindowForWorker( | 85 static DevToolsWindow* OpenDevToolsWindowForWorker( |
119 Profile* profile, | 86 Profile* profile, |
120 content::DevToolsAgentHost* worker_agent); | 87 content::DevToolsAgentHost* worker_agent); |
121 | 88 |
122 static void InspectElement( | 89 static void InspectElement( |
123 content::RenderViewHost* inspected_rvh, int x, int y); | 90 content::RenderViewHost* inspected_rvh, int x, int y); |
124 | 91 |
125 // content::DevToolsFrontendHostDelegate: | |
126 virtual void InspectedContentsClosing() OVERRIDE; | |
127 | |
128 content::WebContents* web_contents() { return web_contents_; } | |
129 Browser* browser() { return browser_; } // For tests. | 92 Browser* browser() { return browser_; } // For tests. |
130 | 93 |
131 content::RenderViewHost* GetRenderViewHost(); | |
132 | |
133 // Inspected WebContents is placed over DevTools WebContents in docked mode. | 94 // Inspected WebContents is placed over DevTools WebContents in docked mode. |
134 // The following method returns the resizing strategy of inspected | 95 // The following method returns the resizing strategy of inspected |
135 // WebContents relative to DevTools WebContents. | 96 // WebContents relative to DevTools WebContents. |
136 const DevToolsContentsResizingStrategy& GetContentsResizingStrategy() const; | 97 const DevToolsContentsResizingStrategy& GetContentsResizingStrategy() const; |
137 | 98 |
138 // Minimum size of the docked DevTools WebContents. This includes | 99 // Minimum size of the docked DevTools WebContents. This includes |
139 // the overlaying inspected WebContents size. | 100 // the overlaying inspected WebContents size. |
140 gfx::Size GetMinimumSize() const; | 101 gfx::Size GetMinimumSize() const; |
141 | 102 |
142 // Sets closure to be called after load is done. If already loaded, calls | 103 // Sets closure to be called after load is done. If already loaded, calls |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*); | 221 static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*); |
261 static DevToolsWindow* AsDevToolsWindow(content::RenderViewHost*); | 222 static DevToolsWindow* AsDevToolsWindow(content::RenderViewHost*); |
262 static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); | 223 static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); |
263 static bool FindInspectedBrowserAndTabIndex( | 224 static bool FindInspectedBrowserAndTabIndex( |
264 content::WebContents* inspected_web_contents, Browser**, int* tab); | 225 content::WebContents* inspected_web_contents, Browser**, int* tab); |
265 static DevToolsWindow* ToggleDevToolsWindow( | 226 static DevToolsWindow* ToggleDevToolsWindow( |
266 content::RenderViewHost* inspected_rvh, | 227 content::RenderViewHost* inspected_rvh, |
267 bool force_open, | 228 bool force_open, |
268 const DevToolsToggleAction& action); | 229 const DevToolsToggleAction& action); |
269 | 230 |
270 // content::NotificationObserver: | 231 // content::DevToolsFrontendHostDelegate override: |
271 virtual void Observe(int type, | 232 virtual void InspectedContentsClosing() OVERRIDE; |
272 const content::NotificationSource& source, | |
273 const content::NotificationDetails& details) OVERRIDE; | |
274 | 233 |
275 // content::WebContentsDelegate: | 234 // content::WebContentsDelegate: |
276 virtual content::WebContents* OpenURLFromTab( | 235 virtual content::WebContents* OpenURLFromTab( |
277 content::WebContents* source, | 236 content::WebContents* source, |
278 const content::OpenURLParams& params) OVERRIDE; | 237 const content::OpenURLParams& params) OVERRIDE; |
| 238 virtual void ActivateContents(content::WebContents* contents) OVERRIDE; |
279 virtual void AddNewContents(content::WebContents* source, | 239 virtual void AddNewContents(content::WebContents* source, |
280 content::WebContents* new_contents, | 240 content::WebContents* new_contents, |
281 WindowOpenDisposition disposition, | 241 WindowOpenDisposition disposition, |
282 const gfx::Rect& initial_pos, | 242 const gfx::Rect& initial_pos, |
283 bool user_gesture, | 243 bool user_gesture, |
284 bool* was_blocked) OVERRIDE; | 244 bool* was_blocked) OVERRIDE; |
285 virtual void CloseContents(content::WebContents* source) OVERRIDE; | 245 virtual void CloseContents(content::WebContents* source) OVERRIDE; |
286 virtual void ContentsZoomChange(bool zoom_in) OVERRIDE; | 246 virtual void ContentsZoomChange(bool zoom_in) OVERRIDE; |
287 virtual void BeforeUnloadFired(content::WebContents* tab, | 247 virtual void BeforeUnloadFired(content::WebContents* tab, |
288 bool proceed, | 248 bool proceed, |
(...skipping 12 matching lines...) Expand all Loading... |
301 SkColor color, | 261 SkColor color, |
302 const std::vector<content::ColorSuggestion>& suggestions) OVERRIDE; | 262 const std::vector<content::ColorSuggestion>& suggestions) OVERRIDE; |
303 virtual void RunFileChooser( | 263 virtual void RunFileChooser( |
304 content::WebContents* web_contents, | 264 content::WebContents* web_contents, |
305 const content::FileChooserParams& params) OVERRIDE; | 265 const content::FileChooserParams& params) OVERRIDE; |
306 virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE; | 266 virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE; |
307 virtual bool PreHandleGestureEvent( | 267 virtual bool PreHandleGestureEvent( |
308 content::WebContents* source, | 268 content::WebContents* source, |
309 const blink::WebGestureEvent& event) OVERRIDE; | 269 const blink::WebGestureEvent& event) OVERRIDE; |
310 | 270 |
311 // content::DevToolsFrontendHostDelegate override: | |
312 virtual void DispatchOnEmbedder(const std::string& message) OVERRIDE; | |
313 | |
314 // DevToolsEmbedderMessageDispatcher::Delegate overrides: | 271 // DevToolsEmbedderMessageDispatcher::Delegate overrides: |
315 virtual void ActivateWindow() OVERRIDE; | 272 virtual void ActivateWindow() OVERRIDE; |
316 virtual void ActivateContents(content::WebContents* contents) OVERRIDE; | |
317 virtual void CloseWindow() OVERRIDE; | 273 virtual void CloseWindow() OVERRIDE; |
318 virtual void SetContentsInsets( | 274 virtual void SetContentsInsets( |
319 int left, int top, int right, int bottom) OVERRIDE; | 275 int left, int top, int right, int bottom) OVERRIDE; |
320 virtual void SetContentsResizingStrategy( | 276 virtual void SetContentsResizingStrategy( |
321 const gfx::Insets& insets, const gfx::Size& min_size) OVERRIDE; | 277 const gfx::Insets& insets, const gfx::Size& min_size) OVERRIDE; |
322 virtual void InspectElementCompleted() OVERRIDE; | 278 virtual void InspectElementCompleted() OVERRIDE; |
323 virtual void MoveWindow(int x, int y) OVERRIDE; | 279 virtual void MoveWindow(int x, int y) OVERRIDE; |
324 virtual void SetIsDocked(bool is_docked) OVERRIDE; | 280 virtual void SetIsDocked(bool is_docked) OVERRIDE; |
325 virtual void OpenInNewTab(const std::string& url) OVERRIDE; | 281 virtual void OpenInNewTab(const std::string& url) OVERRIDE; |
326 virtual void SaveToFile(const std::string& url, | |
327 const std::string& content, | |
328 bool save_as) OVERRIDE; | |
329 virtual void AppendToFile(const std::string& url, | |
330 const std::string& content) OVERRIDE; | |
331 virtual void RequestFileSystems() OVERRIDE; | |
332 virtual void AddFileSystem() OVERRIDE; | |
333 virtual void RemoveFileSystem(const std::string& file_system_path) OVERRIDE; | |
334 virtual void UpgradeDraggedFileSystemPermissions( | |
335 const std::string& file_system_url) OVERRIDE; | |
336 virtual void IndexPath(int request_id, | |
337 const std::string& file_system_path) OVERRIDE; | |
338 virtual void StopIndexing(int request_id) OVERRIDE; | |
339 virtual void SearchInPath(int request_id, | |
340 const std::string& file_system_path, | |
341 const std::string& query) OVERRIDE; | |
342 virtual void SetWhitelistedShortcuts(const std::string& message) OVERRIDE; | 282 virtual void SetWhitelistedShortcuts(const std::string& message) OVERRIDE; |
343 virtual void ZoomIn() OVERRIDE; | |
344 virtual void ZoomOut() OVERRIDE; | |
345 virtual void ResetZoom() OVERRIDE; | |
346 virtual void OpenUrlOnRemoteDeviceAndInspect(const std::string& browser_id, | |
347 const std::string& url) OVERRIDE; | |
348 virtual void StartRemoteDevicesListener() OVERRIDE; | |
349 virtual void StopRemoteDevicesListener() OVERRIDE; | |
350 virtual void EnableRemoteDeviceCounter(bool enable) OVERRIDE; | |
351 | 283 |
352 // DevToolsAndroidBridge::DeviceCountListener override: | 284 // DevToolsWindowBase overrides |
353 virtual void DeviceCountChanged(int count) OVERRIDE; | 285 virtual void AddDevToolsExtensionsToClient() OVERRIDE; |
354 | 286 virtual void DocumentOnLoadCompletedInMainFrame() OVERRIDE; |
355 // Forwards discovered devices to frontend. | |
356 virtual void PopulateRemoteDevices(const std::string& source, | |
357 scoped_ptr<base::ListValue> targets); | |
358 | |
359 // DevToolsFileHelper callbacks. | |
360 void FileSavedAs(const std::string& url); | |
361 void CanceledFileSaveAs(const std::string& url); | |
362 void AppendedTo(const std::string& url); | |
363 void FileSystemsLoaded( | |
364 const std::vector<DevToolsFileHelper::FileSystem>& file_systems); | |
365 void FileSystemAdded(const DevToolsFileHelper::FileSystem& file_system); | |
366 void IndexingTotalWorkCalculated(int request_id, | |
367 const std::string& file_system_path, | |
368 int total_work); | |
369 void IndexingWorked(int request_id, | |
370 const std::string& file_system_path, | |
371 int worked); | |
372 void IndexingDone(int request_id, const std::string& file_system_path); | |
373 void SearchCompleted(int request_id, | |
374 const std::string& file_system_path, | |
375 const std::vector<std::string>& file_paths); | |
376 void ShowDevToolsConfirmInfoBar(const base::string16& message, | |
377 const InfoBarCallback& callback); | |
378 | 287 |
379 void CreateDevToolsBrowser(); | 288 void CreateDevToolsBrowser(); |
380 BrowserWindow* GetInspectedBrowserWindow(); | 289 BrowserWindow* GetInspectedBrowserWindow(); |
381 void ScheduleShow(const DevToolsToggleAction& action); | 290 void ScheduleShow(const DevToolsToggleAction& action); |
382 void Show(const DevToolsToggleAction& action); | 291 void Show(const DevToolsToggleAction& action); |
383 void DoAction(const DevToolsToggleAction& action); | 292 void DoAction(const DevToolsToggleAction& action); |
384 void LoadCompleted(); | 293 void LoadCompleted(); |
385 void SetIsDockedAndShowImmediatelyForTest(bool is_docked); | 294 void SetIsDockedAndShowImmediatelyForTest(bool is_docked); |
386 void UpdateTheme(); | |
387 void AddDevToolsExtensionsToClient(); | |
388 void CallClientFunction(const std::string& function_name, | |
389 const base::Value* arg1, | |
390 const base::Value* arg2, | |
391 const base::Value* arg3); | |
392 void UpdateBrowserToolbar(); | 295 void UpdateBrowserToolbar(); |
393 content::WebContents* GetInspectedWebContents(); | 296 content::WebContents* GetInspectedWebContents(); |
394 void DocumentOnLoadCompletedInMainFrame(); | |
395 | 297 |
396 class InspectedWebContentsObserver; | 298 class InspectedWebContentsObserver; |
397 scoped_ptr<InspectedWebContentsObserver> inspected_contents_observer_; | 299 scoped_ptr<InspectedWebContentsObserver> inspected_contents_observer_; |
398 class FrontendWebContentsObserver; | |
399 friend class FrontendWebContentsObserver; | |
400 scoped_ptr<FrontendWebContentsObserver> frontend_contents_observer_; | |
401 | 300 |
402 Profile* profile_; | |
403 content::WebContents* web_contents_; | |
404 Browser* browser_; | 301 Browser* browser_; |
405 bool is_docked_; | 302 bool is_docked_; |
406 const bool can_dock_; | 303 const bool can_dock_; |
407 bool device_listener_enabled_; | |
408 LoadState load_state_; | 304 LoadState load_state_; |
409 DevToolsToggleAction action_on_load_; | 305 DevToolsToggleAction action_on_load_; |
410 bool ignore_set_is_docked_; | 306 bool ignore_set_is_docked_; |
411 content::NotificationRegistrar registrar_; | |
412 scoped_ptr<content::DevToolsClientHost> frontend_host_; | |
413 scoped_ptr<DevToolsFileHelper> file_helper_; | |
414 scoped_refptr<DevToolsFileSystemIndexer> file_system_indexer_; | |
415 typedef std::map< | |
416 int, | |
417 scoped_refptr<DevToolsFileSystemIndexer::FileSystemIndexingJob> > | |
418 IndexingJobsMap; | |
419 IndexingJobsMap indexing_jobs_; | |
420 DevToolsContentsResizingStrategy contents_resizing_strategy_; | 307 DevToolsContentsResizingStrategy contents_resizing_strategy_; |
421 // True if we're in the process of handling a beforeunload event originating | 308 // True if we're in the process of handling a beforeunload event originating |
422 // from the inspected webcontents, see InterceptPageBeforeUnload for details. | 309 // from the inspected webcontents, see InterceptPageBeforeUnload for details. |
423 bool intercepted_page_beforeunload_; | 310 bool intercepted_page_beforeunload_; |
424 base::Closure load_completed_callback_; | 311 base::Closure load_completed_callback_; |
425 | 312 |
426 scoped_ptr<DevToolsRemoteTargetsUIHandler> remote_targets_handler_; | |
427 scoped_ptr<DevToolsEmbedderMessageDispatcher> embedder_message_dispatcher_; | |
428 base::WeakPtrFactory<DevToolsWindow> weak_factory_; | |
429 base::TimeTicks inspect_element_start_time_; | 313 base::TimeTicks inspect_element_start_time_; |
430 scoped_ptr<DevToolsEventForwarder> event_forwarder_; | 314 scoped_ptr<DevToolsEventForwarder> event_forwarder_; |
431 | 315 |
432 friend class DevToolsEventForwarder; | 316 friend class DevToolsEventForwarder; |
433 DISALLOW_COPY_AND_ASSIGN(DevToolsWindow); | 317 DISALLOW_COPY_AND_ASSIGN(DevToolsWindow); |
434 }; | 318 }; |
435 | 319 |
436 #endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ | 320 #endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_H_ |
OLD | NEW |