views: Initial docked devtools implementation.

This commit is contained in:
Cheng Zhao 2014-07-04 16:25:59 +08:00
parent 4048d491f0
commit e574bf6d0f
5 changed files with 138 additions and 56 deletions

View file

@ -56,8 +56,6 @@
'browser/inspectable_web_contents_view.h',
'browser/inspectable_web_contents_view_mac.h',
'browser/inspectable_web_contents_view_mac.mm',
'browser/linux/inspectable_web_contents_view_linux.h',
'browser/linux/inspectable_web_contents_view_linux.cc',
'browser/mac/bry_application.h',
'browser/mac/bry_application.mm',
'browser/mac/bry_inspectable_web_contents_view.h',
@ -75,6 +73,8 @@
'browser/linux/notification_presenter_linux.cc',
'browser/url_request_context_getter.cc',
'browser/url_request_context_getter.h',
'browser/views/inspectable_web_contents_view_views.h',
'browser/views/inspectable_web_contents_view_views.cc',
'browser/views/views_delegate.cc',
'browser/views/views_delegate.h',
'browser/win/devtools_window.cc',

View file

@ -5,14 +5,28 @@
class DevToolsContentsResizingStrategy;
#if defined(TOOLKIT_VIEWS)
namespace views {
class View;
}
#endif
namespace brightray {
class InspectableWebContentsView {
public:
virtual ~InspectableWebContentsView() {}
virtual gfx::NativeView GetNativeView() const = 0;
#if defined(TOOLKIT_VIEWS)
// Returns the container control, which has devtools view attached.
virtual views::View* GetView() = 0;
// Returns the web view control, which can be used by the
// GetInitiallyFocusedView() to set initial focus to web view.
virtual views::View* GetWebView() = 0;
#endif
virtual gfx::NativeView GetNativeView() const = 0;
virtual void ShowDevTools() = 0;
// Hide the DevTools view.
virtual void CloseDevTools() = 0;

View file

@ -1,46 +0,0 @@
#include "browser/linux/inspectable_web_contents_view_linux.h"
#include "base/strings/stringprintf.h"
#include "browser/browser_client.h"
#include "browser/inspectable_web_contents_impl.h"
#include "content/public/browser/web_contents_view.h"
namespace brightray {
InspectableWebContentsView* CreateInspectableContentsView(
InspectableWebContentsImpl* inspectable_web_contents) {
return new InspectableWebContentsViewLinux(inspectable_web_contents);
}
InspectableWebContentsViewLinux::InspectableWebContentsViewLinux(
InspectableWebContentsImpl* inspectable_web_contents)
: inspectable_web_contents_(inspectable_web_contents) {
}
InspectableWebContentsViewLinux::~InspectableWebContentsViewLinux() {
}
gfx::NativeView InspectableWebContentsViewLinux::GetNativeView() const {
auto web_contents = inspectable_web_contents_->GetWebContents();
return web_contents->GetView()->GetNativeView();
}
void InspectableWebContentsViewLinux::ShowDevTools() {
}
void InspectableWebContentsViewLinux::CloseDevTools() {
}
bool InspectableWebContentsViewLinux::IsDevToolsViewShowing() {
return false;
}
void InspectableWebContentsViewLinux::SetIsDocked(bool docked) {
}
void InspectableWebContentsViewLinux::SetContentsResizingStrategy(
const DevToolsContentsResizingStrategy& strategy) {
}
} // namespace brightray

View file

@ -0,0 +1,98 @@
#include "browser/views/inspectable_web_contents_view_views.h"
#include "browser/inspectable_web_contents_impl.h"
#include "content/public/browser/web_contents_view.h"
#include "ui/views/controls/webview/webview.h"
namespace brightray {
InspectableWebContentsView* CreateInspectableContentsView(
InspectableWebContentsImpl* inspectable_web_contents) {
return new InspectableWebContentsViewViews(inspectable_web_contents);
}
InspectableWebContentsViewViews::InspectableWebContentsViewViews(
InspectableWebContentsImpl* inspectable_web_contents)
: inspectable_web_contents_(inspectable_web_contents),
contents_web_view_(new views::WebView(NULL)),
devtools_web_view_(new views::WebView(NULL)) {
set_owned_by_client();
devtools_web_view_->SetVisible(false);
contents_web_view_->SetWebContents(inspectable_web_contents_->GetWebContents());
AddChildView(devtools_web_view_);
AddChildView(contents_web_view_);
}
InspectableWebContentsViewViews::~InspectableWebContentsViewViews() {
}
views::View* InspectableWebContentsViewViews::GetView() {
return this;
}
views::View* InspectableWebContentsViewViews::GetWebView() {
return contents_web_view_;
}
gfx::NativeView InspectableWebContentsViewViews::GetNativeView() const {
return inspectable_web_contents_->GetWebContents()->GetView()->GetNativeView();
}
void InspectableWebContentsViewViews::ShowDevTools() {
if (devtools_web_view_->visible())
return;
devtools_web_view_->SetVisible(true);
devtools_web_view_->SetWebContents(inspectable_web_contents_->devtools_web_contents());
Layout();
}
void InspectableWebContentsViewViews::CloseDevTools() {
if (!devtools_web_view_->visible())
return;
devtools_web_view_->SetVisible(false);
devtools_web_view_->SetWebContents(NULL);
Layout();
}
bool InspectableWebContentsViewViews::IsDevToolsViewShowing() {
return devtools_web_view_->visible();
}
void InspectableWebContentsViewViews::SetIsDocked(bool docked) {
}
void InspectableWebContentsViewViews::SetContentsResizingStrategy(
const DevToolsContentsResizingStrategy& strategy) {
strategy_.CopyFrom(strategy);
Layout();
}
void InspectableWebContentsViewViews::Layout() {
if (!devtools_web_view_->visible()) {
contents_web_view_->SetBoundsRect(GetContentsBounds());
return;
}
gfx::Size container_size(width(), height());
gfx::Rect old_devtools_bounds(devtools_web_view_->bounds());
gfx::Rect old_contents_bounds(contents_web_view_->bounds());
gfx::Rect new_devtools_bounds;
gfx::Rect new_contents_bounds;
ApplyDevToolsContentsResizingStrategy(strategy_, container_size,
old_devtools_bounds, old_contents_bounds,
&new_devtools_bounds, &new_contents_bounds);
// DevTools cares about the specific position, so we have to compensate RTL
// layout here.
new_devtools_bounds.set_x(GetMirroredXForRect(new_devtools_bounds));
new_contents_bounds.set_x(GetMirroredXForRect(new_contents_bounds));
devtools_web_view_->SetBoundsRect(new_devtools_bounds);
contents_web_view_->SetBoundsRect(new_contents_bounds);
}
} // namespace brightray

View file

@ -1,21 +1,31 @@
#ifndef BRIGHTRAY_BROWSER_LINUX_INSPECTABLE_WEB_CONTENTS_VIEW_LINUX_H_
#define BRIGHTRAY_BROWSER_LINUX_INSPECTABLE_WEB_CONTENTS_VIEW_LINUX_H_
#ifndef BROWSER_VIEWS_INSPECTABLE_WEB_CONTENTS_VIEW_VIEWS_H_
#define BROWSER_VIEWS_INSPECTABLE_WEB_CONTENTS_VIEW_VIEWS_H_
#include "browser/devtools_contents_resizing_strategy.h"
#include "browser/inspectable_web_contents_view.h"
#include "base/compiler_specific.h"
#include "ui/views/view.h"
namespace views {
class WebView;
class Widget;
}
namespace brightray {
class InspectableWebContentsImpl;
class InspectableWebContentsViewLinux : public InspectableWebContentsView {
class InspectableWebContentsViewViews : public InspectableWebContentsView,
public views::View {
public:
explicit InspectableWebContentsViewLinux(
explicit InspectableWebContentsViewViews(
InspectableWebContentsImpl* inspectable_web_contents_impl);
~InspectableWebContentsViewLinux();
~InspectableWebContentsViewViews();
// InspectableWebContentsView:
virtual views::View* GetView() OVERRIDE;
virtual views::View* GetWebView() OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual void ShowDevTools() OVERRIDE;
virtual void CloseDevTools() OVERRIDE;
@ -29,14 +39,20 @@ class InspectableWebContentsViewLinux : public InspectableWebContentsView {
}
private:
// views::View:
virtual void Layout() OVERRIDE;
// Owns us.
InspectableWebContentsImpl* inspectable_web_contents_;
views::WebView* contents_web_view_;
views::WebView* devtools_web_view_;
DevToolsContentsResizingStrategy strategy_;
DISALLOW_COPY_AND_ASSIGN(InspectableWebContentsViewLinux);
DISALLOW_COPY_AND_ASSIGN(InspectableWebContentsViewViews);
};
} // namespace brightray
#endif
#endif // BROWSER_VIEWS_INSPECTABLE_WEB_CONTENTS_VIEW_VIEWS_H_