Update DevToolsWindow to use views and aura

This is required to make it work in Chrome 35.
This commit is contained in:
Adam Roben 2014-07-07 14:27:23 -04:00
parent f65246b3cd
commit e86c409e6b
3 changed files with 55 additions and 55 deletions

View file

@ -4,52 +4,63 @@
#include "browser/win/inspectable_web_contents_view_win.h"
#include "content/public/browser/web_contents_view.h"
#include "ui/base/win/hidden_window.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
#include "ui/views/widget/widget_delegate.h"
namespace brightray {
namespace {
class WidgetDelegateView : public views::WidgetDelegateView {
public:
WidgetDelegateView() {
SetLayoutManager(new views::FillLayout);
}
virtual void DeleteDelegate() OVERRIDE { delete this; }
virtual views::View* GetContentsView() OVERRIDE{ return this; }
virtual bool CanResize() const OVERRIDE { return true; }
virtual bool CanMaximize() const OVERRIDE { return true; }
virtual base::string16 GetWindowTitle() const OVERRIDE { return L"Developer Tools"; }
virtual gfx::Size GetPreferredSize() OVERRIDE { return gfx::Size(800, 600); }
virtual gfx::Size GetMinimumSize() OVERRIDE { return gfx::Size(100, 100); }
};
}
DevToolsWindow* DevToolsWindow::Create(
InspectableWebContentsViewWin* controller) {
return new DevToolsWindow(controller);
}
DevToolsWindow::DevToolsWindow(InspectableWebContentsViewWin* controller)
: controller_(controller) {
: controller_(controller),
widget_(new views::Widget) {
auto delegate_view = new WidgetDelegateView;
views::Widget::InitParams params;
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.top_level = true;
params.native_widget = new views::DesktopNativeWidgetAura(widget_.get());
params.delegate = delegate_view;
widget_->Init(params);
delegate_view->AddChildView(controller->GetView());
delegate_view->Layout();
}
DevToolsWindow::~DevToolsWindow() {
}
LRESULT DevToolsWindow::OnCreate(UINT, WPARAM, LPARAM) {
auto devtools_web_contents =
controller_->inspectable_web_contents()->devtools_web_contents();
SetParent(devtools_web_contents->GetView()->GetNativeView(), hwnd());
SetWindowText(hwnd(), L"Developer Tools");
return 0;
void DevToolsWindow::Show() {
widget_->Show();
}
LRESULT DevToolsWindow::OnDestroy(UINT, WPARAM, LPARAM) {
auto devtools_web_contents =
controller_->inspectable_web_contents()->devtools_web_contents();
SetParent(
devtools_web_contents->GetView()->GetNativeView(), ui::GetHiddenWindow());
void DevToolsWindow::Close() {
widget_->Hide();
}
void DevToolsWindow::Destroy() {
delete this;
return 0;
}
LRESULT DevToolsWindow::OnSize(UINT, WPARAM, LPARAM) {
RECT rect;
GetClientRect(hwnd(), &rect);
auto devtools_web_contents =
controller_->inspectable_web_contents()->devtools_web_contents();
SetWindowPos(devtools_web_contents->GetView()->GetNativeView(),
nullptr,
rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top,
SWP_NOZORDER | SWP_SHOWWINDOW);
return 0;
}
} // namespace brightray

View file

@ -1,35 +1,33 @@
#ifndef BRIGHTRAY_BROWSER_WIN_DEVTOOLS_WINDOW_H_
#define BRIGHTRAY_BROWSER_WIN_DEVTOOLS_WINDOW_H_
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "ui/gfx/win/window_impl.h"
namespace views {
class Widget;
}
namespace brightray {
class InspectableWebContentsViewWin;
class DevToolsWindow : public gfx::WindowImpl,
public base::SupportsWeakPtr<DevToolsWindow> {
class DevToolsWindow : public base::SupportsWeakPtr<DevToolsWindow> {
public:
static DevToolsWindow* Create(
InspectableWebContentsViewWin* inspectable_web_contents_view_win);
CR_BEGIN_MSG_MAP_EX(DevToolsWindow)
CR_MESSAGE_HANDLER_EX(WM_CREATE, OnCreate)
CR_MESSAGE_HANDLER_EX(WM_DESTROY, OnDestroy)
CR_MESSAGE_HANDLER_EX(WM_SIZE, OnSize)
CR_END_MSG_MAP()
void Show();
void Close();
void Destroy();
private:
explicit DevToolsWindow(
InspectableWebContentsViewWin* inspectable_web_contents_view_win);
~DevToolsWindow();
LRESULT OnCreate(UINT message, WPARAM, LPARAM);
LRESULT OnDestroy(UINT message, WPARAM, LPARAM);
LRESULT OnSize(UINT message, WPARAM, LPARAM);
InspectableWebContentsViewWin* controller_;
scoped_ptr<views::Widget> widget_;
DISALLOW_COPY_AND_ASSIGN(DevToolsWindow);
};

View file

@ -143,7 +143,7 @@ InspectableWebContentsViewWin::InspectableWebContentsViewWin(
InspectableWebContentsViewWin::~InspectableWebContentsViewWin() {
if (devtools_window_)
DestroyWindow(devtools_window_->hwnd());
devtools_window_->Destroy();
}
views::View* InspectableWebContentsViewWin::GetView() const {
@ -161,19 +161,10 @@ gfx::NativeView InspectableWebContentsViewWin::GetNativeView() const {
void InspectableWebContentsViewWin::ShowDevTools() {
if (undocked_) {
if (!devtools_window_) {
if (!devtools_window_)
devtools_window_ = DevToolsWindow::Create(this)->AsWeakPtr();
devtools_window_->Init(HWND_DESKTOP, gfx::Rect());
}
auto contents_view = inspectable_web_contents_->GetWebContents()->GetView();
auto size = contents_view->GetContainerSize();
size.Enlarge(-kWindowInset, -kWindowInset);
gfx::CenterAndSizeWindow(contents_view->GetNativeView(),
devtools_window_->hwnd(),
size);
ShowWindow(devtools_window_->hwnd(), SW_SHOWNORMAL);
devtools_window_->Show();
} else {
container_->ShowDevTools();
}
@ -181,7 +172,7 @@ void InspectableWebContentsViewWin::ShowDevTools() {
void InspectableWebContentsViewWin::CloseDevTools() {
if (undocked_)
SendMessage(devtools_window_->hwnd(), WM_CLOSE, 0, 0);
devtools_window_->Close();
else
container_->CloseDevTools();
}
@ -197,7 +188,7 @@ bool InspectableWebContentsViewWin::SetDockSide(const std::string& side) {
} else if (side == "right" || side == "bottom") {
undocked_ = false;
if (devtools_window_)
SendMessage(devtools_window_->hwnd(), WM_CLOSE, 0, 0);
devtools_window_->Close();
container_->SetDockSide(side);
} else {
return false;