Index: chrome/browser/devtools/devtools_window.h |
diff --git a/chrome/browser/devtools/devtools_window.h b/chrome/browser/devtools/devtools_window.h |
index 53a0ccf43ca612b5bf14389d367d3c5ee6bd9605..977c7e9213ecd85e9098a811133deb452c586be1 100644 |
--- a/chrome/browser/devtools/devtools_window.h |
+++ b/chrome/browser/devtools/devtools_window.h |
@@ -49,13 +49,6 @@ namespace user_prefs { |
class PrefRegistrySyncable; |
} |
-enum DevToolsDockSide { |
- DEVTOOLS_DOCK_SIDE_UNDOCKED = 0, |
- DEVTOOLS_DOCK_SIDE_BOTTOM, |
- DEVTOOLS_DOCK_SIDE_RIGHT, |
- DEVTOOLS_DOCK_SIDE_MINIMIZED |
-}; |
- |
class DevToolsWindow : private content::NotificationObserver, |
private content::WebContentsDelegate, |
private content::DevToolsFrontendHostDelegate, |
@@ -69,31 +62,42 @@ class DevToolsWindow : private content::NotificationObserver, |
static std::string GetDevToolsWindowPlacementPrefKey(); |
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); |
+ |
// Return the DevToolsWindow for the given RenderViewHost if one exists, |
// otherwise NULL. |
static DevToolsWindow* GetInstanceForInspectedRenderViewHost( |
content::RenderViewHost* inspected_rvh); |
+ |
+ // Return the DevToolsWindow for the given WebContents if one exists and is |
+ // docked, otherwise NULL. |
static DevToolsWindow* GetDockedInstanceForInspectedTab( |
content::WebContents* inspected_tab); |
+ |
static bool IsDevToolsWindow(content::RenderViewHost* window_rvh); |
+ |
static DevToolsWindow* OpenDevToolsWindowForWorker( |
Profile* profile, |
content::DevToolsAgentHost* worker_agent); |
- static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); |
+ |
+ // Open or focus existing DevTools window, and perform the specified action. |
+ static DevToolsWindow* OpenDevToolsWindow( |
+ content::RenderViewHost* inspected_rvh, |
+ const DevToolsToggleAction& action); |
+ |
+ // Open or focus existing DevTools window, with no special action. |
static DevToolsWindow* OpenDevToolsWindow( |
content::RenderViewHost* inspected_rvh); |
+ |
+ // Perform specified action for current WebContents inside a |browser|. |
+ // This may close currently open DevTools window. |
static DevToolsWindow* ToggleDevToolsWindow( |
Browser* browser, |
const DevToolsToggleAction& action); |
- static void OpenExternalFrontend(Profile* profile, |
- const std::string& frontend_uri, |
- content::DevToolsAgentHost* agent_host); |
- // Exposed for testing, normal clients should not use this method. |
- static DevToolsWindow* ToggleDevToolsWindow( |
- content::RenderViewHost* inspected_rvh, |
- bool force_open, |
- const DevToolsToggleAction& action); |
+ static void OpenExternalFrontend( |
+ Profile* profile, |
+ const std::string& frontend_uri, |
+ content::DevToolsAgentHost* agent_host); |
static void InspectElement( |
content::RenderViewHost* inspected_rvh, int x, int y); |
@@ -105,10 +109,8 @@ class DevToolsWindow : private content::NotificationObserver, |
content::WebContents* web_contents() { return web_contents_; } |
Browser* browser() { return browser_; } // For tests. |
- DevToolsDockSide dock_side() const { return dock_side_; } |
content::RenderViewHost* GetRenderViewHost(); |
- content::DevToolsClientHost* GetDevToolsClientHostForTest(); |
// Inspected WebContents is placed over DevTools WebContents in docked mode. |
// The following methods return the insets of inspected WebContents |
@@ -119,8 +121,6 @@ class DevToolsWindow : private content::NotificationObserver, |
// the overlaying inspected WebContents size. |
gfx::Size GetMinimumSize() const; |
- void Show(const DevToolsToggleAction& action); |
- |
// BeforeUnload interception //////////////////////////////////////////////// |
// In order to preserve any edits the user may have made in devtools, the |
@@ -195,37 +195,50 @@ class DevToolsWindow : private content::NotificationObserver, |
// by user. |
static void OnPageCloseCanceled(content::WebContents* contents); |
- void SetDockSideForTest(DevToolsDockSide dock_side); |
+ void SetIsDockedForTest(bool is_docked); |
+ |
+ // Use with care. DevTools frontend page may be disfunctional after this call. |
+ void SetIsDockedAndShowImmediatelyForTest(bool is_docked); |
private: |
friend class DevToolsControllerTest; |
+ friend class DevToolsSanityTest; |
friend class BrowserWindowControllerTest; |
+ enum LoadState { |
+ kNotLoaded = 0, |
+ kOnLoadFired = 1 << 0, |
+ kIsDockedSet = 1 << 1, |
+ kLoadCompleted = kOnLoadFired | kIsDockedSet |
+ }; |
+ typedef int LoadStateMask; |
+ |
DevToolsWindow(Profile* profile, |
const GURL& frontend_url, |
content::RenderViewHost* inspected_rvh, |
- DevToolsDockSide dock_side); |
+ bool can_dock); |
static DevToolsWindow* Create(Profile* profile, |
const GURL& frontend_url, |
content::RenderViewHost* inspected_rvh, |
- DevToolsDockSide dock_side, |
bool shared_worker_frontend, |
bool external_frontend, |
bool can_dock); |
static GURL GetDevToolsURL(Profile* profile, |
const GURL& base_url, |
- DevToolsDockSide dock_side, |
bool shared_worker_frontend, |
bool external_frontend, |
bool can_dock); |
static DevToolsWindow* FindDevToolsWindow(content::DevToolsAgentHost*); |
static DevToolsWindow* AsDevToolsWindow(content::RenderViewHost*); |
- static DevToolsDockSide GetDockSideFromPrefs(Profile* profile); |
- static std::string SideToString(DevToolsDockSide dock_side); |
- static DevToolsDockSide SideFromString(const std::string& dock_side); |
+ static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile); |
+ static bool IsDockedFromString(const std::string& dock_side); |
static bool FindInspectedBrowserAndTabIndex( |
content::WebContents* inspected_web_contents, Browser**, int* tab); |
+ static DevToolsWindow* ToggleDevToolsWindow( |
+ content::RenderViewHost* inspected_rvh, |
+ bool force_open, |
+ const DevToolsToggleAction& action); |
// content::NotificationObserver: |
virtual void Observe(int type, |
@@ -275,6 +288,7 @@ class DevToolsWindow : private content::NotificationObserver, |
int left, int top, int right, int bottom) OVERRIDE; |
virtual void MoveWindow(int x, int y) OVERRIDE; |
virtual void SetDockSide(const std::string& side) OVERRIDE; |
+ virtual void SetIsDocked(bool is_docked) OVERRIDE; |
virtual void OpenInNewTab(const std::string& url) OVERRIDE; |
virtual void SaveToFile(const std::string& url, |
const std::string& content, |
@@ -315,10 +329,10 @@ class DevToolsWindow : private content::NotificationObserver, |
void CreateDevToolsBrowser(); |
BrowserWindow* GetInspectedBrowserWindow(); |
- bool IsInspectedBrowserPopup(); |
- void UpdateFrontendDockSide(); |
- void ScheduleAction(const DevToolsToggleAction& action); |
- void DoAction(); |
+ void ScheduleShow(const DevToolsToggleAction& action); |
+ void Show(const DevToolsToggleAction& action); |
+ void DoAction(const DevToolsToggleAction& action); |
+ void LoadCompleted(); |
void UpdateTheme(); |
void AddDevToolsExtensionsToClient(); |
void CallClientFunction(const std::string& function_name, |
@@ -326,8 +340,6 @@ class DevToolsWindow : private content::NotificationObserver, |
const base::Value* arg2, |
const base::Value* arg3); |
void UpdateBrowserToolbar(); |
- bool IsDocked(); |
- void Restore(); |
content::WebContents* GetInspectedWebContents(); |
void DocumentOnLoadCompletedInMainFrame(); |
@@ -340,10 +352,11 @@ class DevToolsWindow : private content::NotificationObserver, |
Profile* profile_; |
content::WebContents* web_contents_; |
Browser* browser_; |
- // TODO(dgozman): move dock side knowledge entirely to frontend. |
- DevToolsDockSide dock_side_; |
- bool is_loaded_; |
+ bool is_docked_; |
+ bool can_dock_; |
+ LoadStateMask load_state_mask_; |
DevToolsToggleAction action_on_load_; |
+ bool set_is_docked_for_test_on_load_; |
content::NotificationRegistrar registrar_; |
scoped_ptr<content::DevToolsClientHost> frontend_host_; |
scoped_ptr<DevToolsFileHelper> file_helper_; |
@@ -354,7 +367,6 @@ class DevToolsWindow : private content::NotificationObserver, |
IndexingJobsMap; |
IndexingJobsMap indexing_jobs_; |
gfx::Insets contents_insets_; |
- DevToolsDockSide dock_side_before_minimized_; |
// True if we're in the process of handling a beforeunload event originating |
// from the inspected webcontents, see InterceptPageBeforeUnload for details. |
bool intercepted_page_beforeunload_; |