diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index 86ac1d0365b0..cf5f6599fd7f 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -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', diff --git a/brightray/browser/inspectable_web_contents_view.h b/brightray/browser/inspectable_web_contents_view.h index 251d4337a43c..a79205b11707 100644 --- a/brightray/browser/inspectable_web_contents_view.h +++ b/brightray/browser/inspectable_web_contents_view.h @@ -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; diff --git a/brightray/browser/linux/inspectable_web_contents_view_linux.cc b/brightray/browser/linux/inspectable_web_contents_view_linux.cc deleted file mode 100644 index 5cfb7130c259..000000000000 --- a/brightray/browser/linux/inspectable_web_contents_view_linux.cc +++ /dev/null @@ -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 diff --git a/brightray/browser/views/inspectable_web_contents_view_views.cc b/brightray/browser/views/inspectable_web_contents_view_views.cc new file mode 100644 index 000000000000..9092d79a3e7e --- /dev/null +++ b/brightray/browser/views/inspectable_web_contents_view_views.cc @@ -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 diff --git a/brightray/browser/linux/inspectable_web_contents_view_linux.h b/brightray/browser/views/inspectable_web_contents_view_views.h similarity index 52% rename from brightray/browser/linux/inspectable_web_contents_view_linux.h rename to brightray/browser/views/inspectable_web_contents_view_views.h index ef00ed5b5dea..91d31de6f49c 100644 --- a/brightray/browser/linux/inspectable_web_contents_view_linux.h +++ b/brightray/browser/views/inspectable_web_contents_view_views.h @@ -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_