diff --git a/brightray/browser/inspectable_web_contents.h b/brightray/browser/inspectable_web_contents.h index 9c381ae740..49a50bc507 100644 --- a/brightray/browser/inspectable_web_contents.h +++ b/brightray/browser/inspectable_web_contents.h @@ -22,6 +22,7 @@ class InspectableWebContents { virtual content::WebContents* GetWebContents() const = 0; virtual void ShowDevTools() = 0; + virtual bool IsDevToolsViewShowing() = 0; }; } // namespace brightray diff --git a/brightray/browser/inspectable_web_contents_impl.cc b/brightray/browser/inspectable_web_contents_impl.cc index e3cefbe180..e972e56873 100644 --- a/brightray/browser/inspectable_web_contents_impl.cc +++ b/brightray/browser/inspectable_web_contents_impl.cc @@ -96,6 +96,10 @@ void InspectableWebContentsImpl::ShowDevTools() { view_->ShowDevTools(); } +bool InspectableWebContentsImpl::IsDevToolsViewShowing() { + return devtools_web_contents_ && view_->IsDevToolsViewShowing(); +} + void InspectableWebContentsImpl::UpdateFrontendDockSide() { auto javascript = base::StringPrintf( "InspectorFrontendAPI.setDockSide(\"%s\")", dock_side_.c_str()); diff --git a/brightray/browser/inspectable_web_contents_impl.h b/brightray/browser/inspectable_web_contents_impl.h index 804d8dccfe..53023204dd 100644 --- a/brightray/browser/inspectable_web_contents_impl.h +++ b/brightray/browser/inspectable_web_contents_impl.h @@ -41,6 +41,7 @@ class InspectableWebContentsImpl : virtual content::WebContents* GetWebContents() const OVERRIDE; virtual void ShowDevTools() OVERRIDE; + virtual bool IsDevToolsViewShowing() OVERRIDE; content::WebContents* devtools_web_contents() { return devtools_web_contents_.get(); diff --git a/brightray/browser/inspectable_web_contents_view.h b/brightray/browser/inspectable_web_contents_view.h index eed32f3491..87274805f8 100644 --- a/brightray/browser/inspectable_web_contents_view.h +++ b/brightray/browser/inspectable_web_contents_view.h @@ -13,6 +13,7 @@ class InspectableWebContentsView { virtual void ShowDevTools() = 0; virtual void CloseDevTools() = 0; + virtual bool IsDevToolsViewShowing() = 0; virtual bool SetDockSide(const std::string& side) = 0; }; diff --git a/brightray/browser/inspectable_web_contents_view_mac.h b/brightray/browser/inspectable_web_contents_view_mac.h index f31149f570..86cc782217 100644 --- a/brightray/browser/inspectable_web_contents_view_mac.h +++ b/brightray/browser/inspectable_web_contents_view_mac.h @@ -19,6 +19,7 @@ class InspectableWebContentsViewMac : public InspectableWebContentsView { virtual gfx::NativeView GetNativeView() const OVERRIDE; virtual void ShowDevTools() OVERRIDE; virtual void CloseDevTools() OVERRIDE; + virtual bool IsDevToolsViewShowing() OVERRIDE; virtual bool SetDockSide(const std::string& side) OVERRIDE; InspectableWebContentsImpl* inspectable_web_contents() { diff --git a/brightray/browser/inspectable_web_contents_view_mac.mm b/brightray/browser/inspectable_web_contents_view_mac.mm index c9cc215591..95ed74f2db 100644 --- a/brightray/browser/inspectable_web_contents_view_mac.mm +++ b/brightray/browser/inspectable_web_contents_view_mac.mm @@ -29,6 +29,10 @@ void InspectableWebContentsViewMac::CloseDevTools() { [view_ setDevToolsVisible:NO]; } +bool InspectableWebContentsViewMac::IsDevToolsViewShowing() { + return [view_ isDevToolsVisible]; +} + bool InspectableWebContentsViewMac::SetDockSide(const std::string& side) { return [view_ setDockSide:side]; } diff --git a/brightray/browser/linux/inspectable_web_contents_view_linux.cc b/brightray/browser/linux/inspectable_web_contents_view_linux.cc index cbe8e4e9c3..58d7507fb4 100644 --- a/brightray/browser/linux/inspectable_web_contents_view_linux.cc +++ b/brightray/browser/linux/inspectable_web_contents_view_linux.cc @@ -10,6 +10,17 @@ namespace brightray { +namespace { + +bool IsWidgetAncestryVisible(GtkWidget* widget) { + GtkWidget* parent = widget; + while (parent && gtk_widget_get_visible(parent)) + parent = gtk_widget_get_parent(parent); + return !parent; +} + +} + InspectableWebContentsView* CreateInspectableContentsView( InspectableWebContentsImpl* inspectable_web_contents) { return new InspectableWebContentsViewLinux(inspectable_web_contents); @@ -155,6 +166,13 @@ void InspectableWebContentsViewLinux::CloseDevTools() { } } +bool InspectableWebContentsViewLinux::IsDevToolsViewShowing() { + auto devtools_web_contents = + inspectable_web_contents()->devtools_web_contents(); + GtkWidget* devtools = devtools_web_contents->GetView()->GetNativeView(); + return IsWidgetAncestryVisible(devtools); +} + bool InspectableWebContentsViewLinux::SetDockSide(const std::string& side) { DLOG(INFO) << "InspectableWebContentsViewLinux::SetDockSide: \"" << side << "\""; diff --git a/brightray/browser/linux/inspectable_web_contents_view_linux.h b/brightray/browser/linux/inspectable_web_contents_view_linux.h index c6605b3939..0a80223900 100644 --- a/brightray/browser/linux/inspectable_web_contents_view_linux.h +++ b/brightray/browser/linux/inspectable_web_contents_view_linux.h @@ -18,6 +18,7 @@ class InspectableWebContentsViewLinux : public InspectableWebContentsView { virtual gfx::NativeView GetNativeView() const OVERRIDE; virtual void ShowDevTools() OVERRIDE; virtual void CloseDevTools() OVERRIDE; + virtual bool IsDevToolsViewShowing() OVERRIDE; virtual bool SetDockSide(const std::string& side) OVERRIDE; InspectableWebContentsImpl* inspectable_web_contents() { diff --git a/brightray/browser/mac/bry_inspectable_web_contents_view.mm b/brightray/browser/mac/bry_inspectable_web_contents_view.mm index 24987e5c1c..813d4fb673 100644 --- a/brightray/browser/mac/bry_inspectable_web_contents_view.mm +++ b/brightray/browser/mac/bry_inspectable_web_contents_view.mm @@ -112,6 +112,10 @@ void SetActive(content::WebContents* web_contents, bool active) { [_private->splitView adjustSubviews]; } +- (BOOL)isDevToolsVisible { + return _private->visible; +} + - (BOOL)setDockSide:(const std::string&)side { if (side == "right") { _private->splitView.vertical = YES; @@ -221,4 +225,4 @@ void SetActive(content::WebContents* web_contents, bool active) { @end @implementation BRYInspectableWebContentsViewPrivate -@end \ No newline at end of file +@end diff --git a/brightray/browser/mac/bry_inspectable_web_contents_view_private.h b/brightray/browser/mac/bry_inspectable_web_contents_view_private.h index ef8c50cc8b..943ef93e31 100644 --- a/brightray/browser/mac/bry_inspectable_web_contents_view_private.h +++ b/brightray/browser/mac/bry_inspectable_web_contents_view_private.h @@ -8,6 +8,7 @@ class InspectableWebContentsViewMac; - (instancetype)initWithInspectableWebContentsViewMac:(brightray::InspectableWebContentsViewMac *)inspectableWebContentsView; - (void)setDevToolsVisible:(BOOL)visible; +- (BOOL)isDevToolsVisible; - (BOOL)setDockSide:(const std::string&)side; -@end \ No newline at end of file +@end diff --git a/brightray/browser/win/inspectable_web_contents_view_win.cc b/brightray/browser/win/inspectable_web_contents_view_win.cc index 4913571319..dca7ba4f3e 100644 --- a/brightray/browser/win/inspectable_web_contents_view_win.cc +++ b/brightray/browser/win/inspectable_web_contents_view_win.cc @@ -57,6 +57,10 @@ void InspectableWebContentsViewWin::CloseDevTools() { SendMessage(devtools_window_->hwnd(), WM_CLOSE, 0, 0); } +bool InspectableWebContentsViewWin::IsDevToolsViewShowing() { + return devtools_window_; +} + bool InspectableWebContentsViewWin::SetDockSide(const std::string& side) { return false; } diff --git a/brightray/browser/win/inspectable_web_contents_view_win.h b/brightray/browser/win/inspectable_web_contents_view_win.h index 534f499728..55b09b2d3e 100644 --- a/brightray/browser/win/inspectable_web_contents_view_win.h +++ b/brightray/browser/win/inspectable_web_contents_view_win.h @@ -20,6 +20,7 @@ class InspectableWebContentsViewWin : public InspectableWebContentsView { virtual gfx::NativeView GetNativeView() const OVERRIDE; virtual void ShowDevTools() OVERRIDE; virtual void CloseDevTools() OVERRIDE; + virtual bool IsDevToolsViewShowing() OVERRIDE; virtual bool SetDockSide(const std::string& side) OVERRIDE; InspectableWebContentsImpl* inspectable_web_contents() {