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 #include <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 // static | 133 // static |
134 DevToolsWindow* DevToolsWindow::GetDockedInstanceForInspectedTab( | 134 DevToolsWindow* DevToolsWindow::GetDockedInstanceForInspectedTab( |
135 WebContents* inspected_web_contents) { | 135 WebContents* inspected_web_contents) { |
136 if (!inspected_web_contents) | 136 if (!inspected_web_contents) |
137 return NULL; | 137 return NULL; |
138 | 138 |
139 if (!DevToolsAgentHost::HasFor(inspected_web_contents->GetRenderViewHost())) | 139 if (!DevToolsAgentHost::HasFor(inspected_web_contents->GetRenderViewHost())) |
140 return NULL; | 140 return NULL; |
141 scoped_refptr<DevToolsAgentHost> agent(DevToolsAgentHost::GetOrCreateFor( | 141 scoped_refptr<DevToolsAgentHost> agent(DevToolsAgentHost::GetOrCreateFor( |
142 inspected_web_contents->GetRenderViewHost())); | 142 inspected_web_contents->GetRenderViewHost())); |
143 DevToolsManager* manager = DevToolsManager::GetInstance(); | 143 DevToolsWindow* window = FindDevToolsWindow(agent); |
144 DevToolsClientHost* client_host = manager->GetDevToolsClientHostFor(agent); | |
145 DevToolsWindow* window = AsDevToolsWindow(client_host); | |
146 return window && window->IsDocked() ? window : NULL; | 144 return window && window->IsDocked() ? window : NULL; |
147 } | 145 } |
148 | 146 |
149 // static | 147 // static |
150 bool DevToolsWindow::IsDevToolsWindow(RenderViewHost* window_rvh) { | 148 bool DevToolsWindow::IsDevToolsWindow(RenderViewHost* window_rvh) { |
151 return AsDevToolsWindow(window_rvh) != NULL; | 149 return AsDevToolsWindow(window_rvh) != NULL; |
152 } | 150 } |
153 | 151 |
154 // static | 152 // static |
155 DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker( | 153 DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker( |
156 Profile* profile, | 154 Profile* profile, |
157 DevToolsAgentHost* worker_agent) { | 155 DevToolsAgentHost* worker_agent) { |
158 DevToolsWindow* window; | 156 DevToolsWindow* window = FindDevToolsWindow(worker_agent); |
159 DevToolsClientHost* client = content::DevToolsManager::GetInstance()-> | 157 if (!window) { |
160 GetDevToolsClientHostFor(worker_agent); | |
161 if (client) { | |
162 window = AsDevToolsWindow(client); | |
163 if (!window) | |
164 return NULL; | |
165 } else { | |
166 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile); | 158 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile); |
| 159 // Will disconnect the current client host if there is one. |
167 DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( | 160 DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor( |
168 worker_agent, | 161 worker_agent, |
169 window->frontend_host_.get()); | 162 window->frontend_host_.get()); |
170 } | 163 } |
171 window->Show(DEVTOOLS_TOGGLE_ACTION_SHOW); | 164 window->Show(DEVTOOLS_TOGGLE_ACTION_SHOW); |
172 return window; | 165 return window; |
173 } | 166 } |
174 | 167 |
175 // static | 168 // static |
176 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( | 169 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 instances.erase(it); | 279 instances.erase(it); |
287 } | 280 } |
288 | 281 |
289 content::WebContents* DevToolsWindow::GetInspectedWebContents() { | 282 content::WebContents* DevToolsWindow::GetInspectedWebContents() { |
290 if (!inspected_contents_observer_) | 283 if (!inspected_contents_observer_) |
291 return NULL; | 284 return NULL; |
292 return inspected_contents_observer_->Get(); | 285 return inspected_contents_observer_->Get(); |
293 } | 286 } |
294 | 287 |
295 void DevToolsWindow::InspectedContentsClosing() { | 288 void DevToolsWindow::InspectedContentsClosing() { |
| 289 Hide(); |
| 290 } |
| 291 |
| 292 void DevToolsWindow::Hide() { |
296 if (IsDocked()) { | 293 if (IsDocked()) { |
297 // Update dev tools to reflect removed dev tools window. | 294 // Update dev tools to reflect removed dev tools window. |
298 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); | 295 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); |
299 if (inspected_window) | 296 if (inspected_window) |
300 inspected_window->UpdateDevTools(); | 297 inspected_window->UpdateDevTools(); |
301 // In case of docked web_contents_, we own it so delete here. | 298 // In case of docked web_contents_, we own it so delete here. |
302 delete web_contents_; | 299 delete web_contents_; |
303 | 300 |
304 delete this; | 301 delete this; |
305 } else { | 302 } else { |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 } | 704 } |
708 | 705 |
709 // static | 706 // static |
710 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( | 707 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( |
711 RenderViewHost* inspected_rvh, | 708 RenderViewHost* inspected_rvh, |
712 bool force_open, | 709 bool force_open, |
713 DevToolsToggleAction action) { | 710 DevToolsToggleAction action) { |
714 scoped_refptr<DevToolsAgentHost> agent( | 711 scoped_refptr<DevToolsAgentHost> agent( |
715 DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); | 712 DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); |
716 DevToolsManager* manager = DevToolsManager::GetInstance(); | 713 DevToolsManager* manager = DevToolsManager::GetInstance(); |
717 DevToolsClientHost* host = manager->GetDevToolsClientHostFor(agent); | 714 DevToolsWindow* window = FindDevToolsWindow(agent); |
718 DevToolsWindow* window = AsDevToolsWindow(host); | |
719 if (host && !window) { | |
720 // Break remote debugging / extension debugging session. | |
721 host->ReplacedWithAnotherClient(); | |
722 manager->UnregisterDevToolsClientHostFor(agent); | |
723 } | |
724 | |
725 bool do_open = force_open; | 715 bool do_open = force_open; |
726 if (!window) { | 716 if (!window) { |
727 Profile* profile = Profile::FromBrowserContext( | 717 Profile* profile = Profile::FromBrowserContext( |
728 inspected_rvh->GetProcess()->GetBrowserContext()); | 718 inspected_rvh->GetProcess()->GetBrowserContext()); |
729 DevToolsDockSide dock_side = GetDockSideFromPrefs(profile); | 719 DevToolsDockSide dock_side = GetDockSideFromPrefs(profile); |
730 window = Create(profile, inspected_rvh, dock_side, false); | 720 window = Create(profile, inspected_rvh, dock_side, false); |
| 721 // Will disconnect the current client host if there is one. |
731 manager->RegisterDevToolsClientHostFor(agent, window->frontend_host_.get()); | 722 manager->RegisterDevToolsClientHostFor(agent, window->frontend_host_.get()); |
732 do_open = true; | 723 do_open = true; |
733 } | 724 } |
734 | 725 |
735 // Update toolbar to reflect DevTools changes. | 726 // Update toolbar to reflect DevTools changes. |
736 window->UpdateBrowserToolbar(); | 727 window->UpdateBrowserToolbar(); |
737 | 728 |
738 // If window is docked and visible, we hide it on toggle. If window is | 729 // If window is docked and visible, we hide it on toggle. If window is |
739 // undocked, we show (activate) it. | 730 // undocked, we show (activate) it. |
740 if (!window->IsDocked() || do_open) | 731 if (!window->IsDocked() || do_open) |
741 window->Show(action); | 732 window->Show(action); |
742 else | 733 else |
743 manager->UnregisterDevToolsClientHostFor(agent); | 734 window->CloseWindow(); |
744 | 735 |
745 return window; | 736 return window; |
746 } | 737 } |
747 | 738 |
748 // static | 739 // static |
749 DevToolsWindow* DevToolsWindow::AsDevToolsWindow( | 740 DevToolsWindow* DevToolsWindow::FindDevToolsWindow( |
750 DevToolsClientHost* client_host) { | 741 DevToolsAgentHost* agent_host) { |
751 if (!client_host || g_instances == NULL) | 742 DevToolsManager* manager = DevToolsManager::GetInstance(); |
752 return NULL; | |
753 DevToolsWindowList& instances = g_instances.Get(); | 743 DevToolsWindowList& instances = g_instances.Get(); |
754 for (DevToolsWindowList::iterator it = instances.begin(); | 744 for (DevToolsWindowList::iterator it = instances.begin(); |
755 it != instances.end(); ++it) { | 745 it != instances.end(); ++it) { |
756 if ((*it)->frontend_host_.get() == client_host) | 746 if (manager->GetDevToolsAgentHostFor((*it)->frontend_host_.get()) == |
| 747 agent_host) |
757 return *it; | 748 return *it; |
758 } | 749 } |
759 return NULL; | 750 return NULL; |
760 } | 751 } |
761 | 752 |
762 // static | 753 // static |
763 DevToolsWindow* DevToolsWindow::AsDevToolsWindow(RenderViewHost* window_rvh) { | 754 DevToolsWindow* DevToolsWindow::AsDevToolsWindow(RenderViewHost* window_rvh) { |
764 if (g_instances == NULL) | 755 if (g_instances == NULL) |
765 return NULL; | 756 return NULL; |
766 DevToolsWindowList& instances = g_instances.Get(); | 757 DevToolsWindowList& instances = g_instances.Get(); |
(...skipping 24 matching lines...) Expand all Loading... |
791 SetHeight(height); | 782 SetHeight(height); |
792 // Update inspected window to adjust heights. | 783 // Update inspected window to adjust heights. |
793 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); | 784 BrowserWindow* inspected_window = GetInspectedBrowserWindow(); |
794 if (inspected_window) | 785 if (inspected_window) |
795 inspected_window->UpdateDevTools(); | 786 inspected_window->UpdateDevTools(); |
796 } | 787 } |
797 | 788 |
798 void DevToolsWindow::CloseWindow() { | 789 void DevToolsWindow::CloseWindow() { |
799 DCHECK(IsDocked()); | 790 DCHECK(IsDocked()); |
800 DevToolsManager::GetInstance()->ClientHostClosing(frontend_host_.get()); | 791 DevToolsManager::GetInstance()->ClientHostClosing(frontend_host_.get()); |
801 InspectedContentsClosing(); | 792 Hide(); |
802 } | 793 } |
803 | 794 |
804 void DevToolsWindow::MoveWindow(int x, int y) { | 795 void DevToolsWindow::MoveWindow(int x, int y) { |
805 if (!IsDocked()) { | 796 if (!IsDocked()) { |
806 gfx::Rect bounds = browser_->window()->GetBounds(); | 797 gfx::Rect bounds = browser_->window()->GetBounds(); |
807 bounds.Offset(x, y); | 798 bounds.Offset(x, y); |
808 browser_->window()->SetBounds(bounds); | 799 browser_->window()->SetBounds(bounds); |
809 } | 800 } |
810 } | 801 } |
811 | 802 |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1041 | 1032 |
1042 // static | 1033 // static |
1043 DevToolsDockSide DevToolsWindow::SideFromString( | 1034 DevToolsDockSide DevToolsWindow::SideFromString( |
1044 const std::string& dock_side) { | 1035 const std::string& dock_side) { |
1045 if (dock_side == kDockSideRight) | 1036 if (dock_side == kDockSideRight) |
1046 return DEVTOOLS_DOCK_SIDE_RIGHT; | 1037 return DEVTOOLS_DOCK_SIDE_RIGHT; |
1047 if (dock_side == kDockSideBottom) | 1038 if (dock_side == kDockSideBottom) |
1048 return DEVTOOLS_DOCK_SIDE_BOTTOM; | 1039 return DEVTOOLS_DOCK_SIDE_BOTTOM; |
1049 return DEVTOOLS_DOCK_SIDE_UNDOCKED; | 1040 return DEVTOOLS_DOCK_SIDE_UNDOCKED; |
1050 } | 1041 } |
OLD | NEW |