summaryrefslogtreecommitdiffstats
path: root/chrome/browser/debugger/devtools_window.cc
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-01 07:50:04 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-01 07:50:04 +0000
commit10fb687b87f5fde62b3df3e2dd5c5d6f5533d715 (patch)
tree32440c96aec4e6fc8f4e9e11f036e599f3e73388 /chrome/browser/debugger/devtools_window.cc
parentbb965d182303371fece6ca3254689d73a25e5548 (diff)
downloadchromium_src-10fb687b87f5fde62b3df3e2dd5c5d6f5533d715.zip
chromium_src-10fb687b87f5fde62b3df3e2dd5c5d6f5533d715.tar.gz
chromium_src-10fb687b87f5fde62b3df3e2dd5c5d6f5533d715.tar.bz2
DevTools: Introduce docked version of DevTools.
Review URL: http://codereview.chromium.org/149071 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19713 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/debugger/devtools_window.cc')
-rw-r--r--chrome/browser/debugger/devtools_window.cc188
1 files changed, 159 insertions, 29 deletions
diff --git a/chrome/browser/debugger/devtools_window.cc b/chrome/browser/debugger/devtools_window.cc
index 99b0dcc..f3c81ea 100644
--- a/chrome/browser/debugger/devtools_window.cc
+++ b/chrome/browser/debugger/devtools_window.cc
@@ -5,9 +5,9 @@
#include "app/l10n_util.h"
#include "base/command_line.h"
#include "chrome/browser/browser.h"
+#include "chrome/browser/browser_list.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_window.h"
-#include "chrome/browser/debugger/devtools_client_host.h"
#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/profile.h"
@@ -15,6 +15,8 @@
#include "chrome/browser/tab_contents/navigation_entry.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/tab_contents/tab_contents_view.h"
+#include "chrome/browser/tabs/tab_strip_model.h"
+#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
@@ -22,10 +24,117 @@
#include "chrome/common/url_constants.h"
#include "grit/generated_resources.h"
-DevToolsWindow::DevToolsWindow(Profile* profile)
- : TabStripModelObserver(),
- inspected_tab_closing_(false) {
+namespace {
+
+class FloatingWindow : public DevToolsWindow,
+ TabStripModelObserver {
+ public:
+ FloatingWindow(Profile* profile);
+ virtual ~FloatingWindow();
+ virtual void Show();
+ virtual void InspectedTabClosing();
+
+ // TabStripModelObserver implementation
+ virtual void TabClosingAt(TabContents* contents, int index);
+ virtual void TabStripEmpty();
+
+ private:
+ bool inspected_tab_closing_;
+ DISALLOW_COPY_AND_ASSIGN(FloatingWindow);
+};
+
+class DockedWindow : public DevToolsWindow {
+ public:
+ DockedWindow(Profile* profile, BrowserWindow* window);
+ virtual ~DockedWindow();
+ virtual void Show();
+ virtual void InspectedTabClosing();
+
+ private:
+
+ BrowserWindow* window_;
+ DISALLOW_COPY_AND_ASSIGN(DockedWindow);
+};
+
+} // namespace
+
+// static
+DevToolsWindow* DevToolsWindow::CreateDevToolsWindow(
+ Profile* profile,
+ RenderViewHost* inspected_rvh,
+ bool docked) {
+ if (docked) {
+ BrowserWindow* window = DevToolsWindow::GetBrowserWindow(inspected_rvh);
+ if (window) {
+ return new DockedWindow(profile, window);
+ }
+ }
+ return new FloatingWindow(profile);
+}
+
+DevToolsWindow::DevToolsWindow(bool docked)
+ : docked_(docked) {
+}
+
+DevToolsWindow::~DevToolsWindow() {
+}
+
+DevToolsWindow* DevToolsWindow::AsDevToolsWindow() {
+ return this;
+}
+
+RenderViewHost* DevToolsWindow::GetRenderViewHost() {
+ return tab_contents_->render_view_host();
+}
+
+void DevToolsWindow::SendMessageToClient(const IPC::Message& message) {
+ RenderViewHost* target_host = tab_contents_->render_view_host();
+ IPC::Message* m = new IPC::Message(message);
+ m->set_routing_id(target_host->routing_id());
+ target_host->Send(m);
+}
+
+void DevToolsWindow::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ tab_contents_->render_view_host()->
+ ExecuteJavascriptInWebFrame(
+ L"", docked_ ? L"WebInspector.setAttachedWindow(true);" :
+ L"WebInspector.setAttachedWindow(false);");
+}
+GURL DevToolsWindow::GetContentsUrl() {
+ return GURL(std::string(chrome::kChromeUIDevToolsURL) + "devtools.html");
+}
+
+void DevToolsWindow::InitTabContents(TabContents* tab_contents) {
+ tab_contents_ = tab_contents;
+ registrar_.Add(this, NotificationType::LOAD_STOP,
+ Source<NavigationController>(&tab_contents_->controller()));
+}
+
+// static
+BrowserWindow* DevToolsWindow::GetBrowserWindow(RenderViewHost* rvh) {
+ for (BrowserList::const_iterator it = BrowserList::begin();
+ it != BrowserList::end(); ++it) {
+ Browser* browser = *it;
+ for (int i = 0; i < browser->tab_count(); ++i) {
+ TabContents* tab_contents = browser->GetTabContentsAt(i);
+ if (tab_contents->render_view_host() == rvh) {
+ return browser->window();
+ }
+ }
+ }
+ return NULL;
+}
+
+//
+// Floating window implementation
+//
+FloatingWindow::FloatingWindow(Profile* profile)
+ : DevToolsWindow(false),
+ TabStripModelObserver(),
+ inspected_tab_closing_(false) {
// TODO(pfeldman): Make browser's getter for this key static.
std::wstring wp_key = L"";
wp_key.append(prefs::kBrowserWindowPlacement);
@@ -49,53 +158,74 @@ DevToolsWindow::DevToolsWindow(Profile* profile)
}
browser_ = Browser::CreateForApp(L"DevToolsApp", profile, false);
- GURL contents(std::string(chrome::kChromeUIDevToolsURL) + "devtools.html");
- browser_->AddTabWithURL(contents, GURL(), PageTransition::START_PAGE, true,
- -1, false, NULL);
- tab_contents_ = browser_->GetSelectedTabContents();
+ browser_->AddTabWithURL(GetContentsUrl(), GURL(), PageTransition::START_PAGE,
+ true, -1, false, NULL);
+ TabContents* tab_contents = browser_->GetSelectedTabContents();
browser_->tabstrip_model()->AddObserver(this);
// Wipe out page icon so that the default application icon is used.
- NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
+ NavigationEntry* entry = tab_contents->controller().GetActiveEntry();
entry->favicon().set_bitmap(SkBitmap());
entry->favicon().set_is_valid(true);
+
+ InitTabContents(tab_contents);
}
-DevToolsWindow::~DevToolsWindow() {
+FloatingWindow::~FloatingWindow() {
}
-void DevToolsWindow::Show() {
+void FloatingWindow::Show() {
browser_->window()->Show();
tab_contents_->view()->SetInitialFocus();
}
-DevToolsWindow* DevToolsWindow::AsDevToolsWindow() {
- return this;
-}
-
-RenderViewHost* DevToolsWindow::GetRenderViewHost() const {
- return tab_contents_->render_view_host();
-}
-
-void DevToolsWindow::InspectedTabClosing() {
+void FloatingWindow::InspectedTabClosing() {
inspected_tab_closing_ = true;
browser_->CloseAllTabs();
}
-void DevToolsWindow::SendMessageToClient(const IPC::Message& message) {
- RenderViewHost* target_host = tab_contents_->render_view_host();
- IPC::Message* m = new IPC::Message(message);
- m->set_routing_id(target_host->routing_id());
- target_host->Send(m);
-}
-
-void DevToolsWindow::TabClosingAt(TabContents* contents, int index) {
+void FloatingWindow::TabClosingAt(TabContents* contents, int index) {
if (!inspected_tab_closing_ && contents == tab_contents_) {
// Notify manager that this DevToolsClientHost no longer exists.
NotifyCloseListener();
}
}
-void DevToolsWindow::TabStripEmpty() {
+void FloatingWindow::TabStripEmpty() {
delete this;
}
+
+//
+// Docked window implementation
+//
+DockedWindow::DockedWindow(Profile* profile, BrowserWindow* window)
+ : DevToolsWindow(true),
+ window_(window) {
+ TabContents* tab_contents = new TabContents(profile,
+ NULL, MSG_ROUTING_NONE, NULL);
+ tab_contents->render_view_host()->AllowDOMUIBindings();
+ tab_contents->controller().LoadURL(GetContentsUrl(), GURL(),
+ PageTransition::START_PAGE);
+ browser_ = NULL;
+ InitTabContents(tab_contents);
+}
+
+DockedWindow::~DockedWindow() {
+}
+
+void DockedWindow::Show() {
+ //TODO(pfeldman): Add SetDevToolsVisible to BrowserWindow API.
+//#ifdef OS_WIN
+// BrowserView* browser_view = static_cast<BrowserView*>(window_);
+// browser_view->UpdateDevTools();
+// tab_contents_->view()->SetInitialFocus();
+//#endif
+}
+
+void DockedWindow::InspectedTabClosing() {
+//#ifdef OS_WIN
+// BrowserView* browser_view = static_cast<BrowserView*>(window_);
+// browser_view->UpdateDevTools();
+//#endif
+// delete this;
+}