diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-01 07:50:04 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-01 07:50:04 +0000 |
commit | 10fb687b87f5fde62b3df3e2dd5c5d6f5533d715 (patch) | |
tree | 32440c96aec4e6fc8f4e9e11f036e599f3e73388 /chrome/browser/debugger/devtools_window.cc | |
parent | bb965d182303371fece6ca3254689d73a25e5548 (diff) | |
download | chromium_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.cc | 188 |
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; +} |