Implement undocked dev tools on Windows

DevToolsWindow represents a vanilla top-level window that shows the dev tools.
It uses ui::WindowImpl to implement window functionality, which requires a
newer libchromiumcontent which contains the necessary headers for using that
class, and requires some modifications to brightray.gypi to make WTL's  headers
available.

* vendor/libchromiumcontent 2f53a96...fc02d93 (4):
  > Export third_party/wtl/include headers
  > Export test_support_base.pdb and test_support_content.pdb
  > Fix linker errors with test_support_base on Windows
  > Fix linker errors with base_prefs_test_support on Windows
This commit is contained in:
Adam Roben 2013-06-04 14:31:37 -04:00
parent 4c9870e753
commit 9ad77c4a38
7 changed files with 122 additions and 1 deletions

View file

@ -50,6 +50,8 @@
'browser/notification_presenter_mac.mm',
'browser/url_request_context_getter.cc',
'browser/url_request_context_getter.h',
'browser/win/devtools_window.cc',
'browser/win/devtools_window.h',
'browser/win/inspectable_web_contents_view_win.cc',
'browser/win/inspectable_web_contents_view_win.h',
'common/application_info.h',

View file

@ -171,6 +171,9 @@
'conditions': [
['OS=="win"', {
'target_defaults': {
'include_dirs': [
'<(libchromiumcontent_include_dir)/third_party/wtl/include',
],
'defines': [
'_WIN32_WINNT=0x0602',
'WINVER=0x0602',
@ -182,6 +185,10 @@
'CERT_CHAIN_PARA_HAS_EXTRA_FIELDS',
'WIN32_LEAN_AND_MEAN',
'_ATL_NO_OPENGL',
'_SECURE_ATL',
],
'msvs_system_include_dirs': [
'$(VSInstallDir)/VC/atlmfc/include',
],
'msvs_settings': {
'VCCLCompilerTool': {

View file

@ -0,0 +1,47 @@
#include "browser/win/devtools_window.h"
#include "browser/inspectable_web_contents_impl.h"
#include "browser/win/inspectable_web_contents_view_win.h"
#include "content/public/browser/web_contents_view.h"
#include "ui/base/win/hidden_window.h"
namespace brightray {
DevToolsWindow* DevToolsWindow::Create(InspectableWebContentsViewWin* controller) {
return new DevToolsWindow(controller);
}
DevToolsWindow::DevToolsWindow(InspectableWebContentsViewWin* controller)
: controller_(controller) {
}
DevToolsWindow::~DevToolsWindow() {
}
LRESULT DevToolsWindow::OnCreate(UINT, WPARAM, LPARAM, BOOL&) {
SetParent(controller_->inspectable_web_contents()->devtools_web_contents()->GetView()->GetNativeView(), hwnd());
SetWindowText(hwnd(), L"Developer Tools");
return 0;
}
LRESULT DevToolsWindow::OnDestroy(UINT, WPARAM, LPARAM, BOOL&) {
SetParent(controller_->inspectable_web_contents()->devtools_web_contents()->GetView()->GetNativeView(), ui::GetHiddenWindow());
delete this;
return 0;
}
LRESULT DevToolsWindow::OnSize(UINT, WPARAM, LPARAM, BOOL&) {
RECT rect;
GetClientRect(hwnd(), &rect);
SetWindowPos(controller_->inspectable_web_contents()->devtools_web_contents()->GetView()->GetNativeView(),
nullptr,
rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top,
SWP_NOZORDER | SWP_SHOWWINDOW);
return 0;
}
}

View file

@ -0,0 +1,36 @@
#ifndef BRIGHTRAY_BROWSER_WIN_DEVTOOLS_WINDOW_H_
#define BRIGHTRAY_BROWSER_WIN_DEVTOOLS_WINDOW_H_
#include "base/memory/weak_ptr.h"
#include "ui/base/win/window_impl.h"
namespace brightray {
class InspectableWebContentsViewWin;
class DevToolsWindow : public ui::WindowImpl, public base::SupportsWeakPtr<DevToolsWindow> {
public:
static DevToolsWindow* Create(InspectableWebContentsViewWin*);
BEGIN_MSG_MAP_EX(DevToolsWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_SIZE, OnSize)
END_MSG_MAP()
private:
DevToolsWindow(InspectableWebContentsViewWin*);
~DevToolsWindow();
LRESULT OnCreate(UINT message, WPARAM, LPARAM, BOOL& handled);
LRESULT OnDestroy(UINT message, WPARAM, LPARAM, BOOL& handled);
LRESULT OnSize(UINT message, WPARAM, LPARAM, BOOL& handled);
InspectableWebContentsViewWin* controller_;
DISALLOW_COPY_AND_ASSIGN(DevToolsWindow);
};
}
#endif

View file

@ -1,11 +1,20 @@
#include "browser/win/inspectable_web_contents_view_win.h"
#include "browser/browser_client.h"
#include "browser/inspectable_web_contents_impl.h"
#include "browser/win/devtools_window.h"
#include "content/public/browser/web_contents_view.h"
#include "ui/base/win/hwnd_util.h"
namespace brightray {
namespace {
const int kWindowInset = 100;
}
InspectableWebContentsView* CreateInspectableContentsView(InspectableWebContentsImpl* inspectable_web_contents) {
return new InspectableWebContentsViewWin(inspectable_web_contents);
}
@ -15,6 +24,8 @@ InspectableWebContentsViewWin::InspectableWebContentsViewWin(InspectableWebConte
}
InspectableWebContentsViewWin::~InspectableWebContentsViewWin() {
if (devtools_window_)
DestroyWindow(devtools_window_->hwnd());
}
gfx::NativeView InspectableWebContentsViewWin::GetNativeView() const {
@ -22,9 +33,23 @@ gfx::NativeView InspectableWebContentsViewWin::GetNativeView() const {
}
void InspectableWebContentsViewWin::ShowDevTools() {
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);
ui::CenterAndSizeWindow(contents_view->GetNativeView(), devtools_window_->hwnd(), size);
ShowWindow(devtools_window_->hwnd(), SW_SHOWNORMAL);
}
void InspectableWebContentsViewWin::CloseDevTools() {
if (!devtools_window_)
return;
SendMessage(devtools_window_->hwnd(), WM_CLOSE, 0, 0);
}
bool InspectableWebContentsViewWin::SetDockSide(const std::string& side) {

View file

@ -4,9 +4,11 @@
#include "browser/inspectable_web_contents_view.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
namespace brightray {
class DevToolsWindow;
class InspectableWebContentsImpl;
class InspectableWebContentsViewWin : public InspectableWebContentsView {
@ -25,6 +27,8 @@ private:
// Owns us.
InspectableWebContentsImpl* inspectable_web_contents_;
base::WeakPtr<DevToolsWindow> devtools_window_;
DISALLOW_COPY_AND_ASSIGN(InspectableWebContentsViewWin);
};

@ -1 +1 @@
Subproject commit 2f53a96fc665176d7e07b67bac6d861295587ce8
Subproject commit fc02d9380a52ed648196ea6a0d9053483f233658