Index: ash/devtools/ash_devtools_dom_agent.cc |
diff --git a/ash/devtools/ash_devtools_dom_agent.cc b/ash/devtools/ash_devtools_dom_agent.cc |
index 3a6831a8e2e25ea8073ea354302fe3a99dd1cda3..ce290b5e49e1e0a577e598ec162d5872321cead4 100644 |
--- a/ash/devtools/ash_devtools_dom_agent.cc |
+++ b/ash/devtools/ash_devtools_dom_agent.cc |
@@ -9,12 +9,14 @@ |
#include "ash/devtools/widget_element.h" |
#include "ash/devtools/window_element.h" |
#include "ash/public/cpp/shell_window_ids.h" |
-#include "ash/root_window_controller.h" |
-#include "ash/shell.h" |
#include "components/ui_devtools/devtools_server.h" |
#include "third_party/skia/include/core/SkColor.h" |
+#include "ui/aura/client/screen_position_client.h" |
+#include "ui/aura/env.h" |
#include "ui/aura/window.h" |
+#include "ui/aura/window_tree_host.h" |
#include "ui/display/display.h" |
+#include "ui/display/screen.h" |
#include "ui/views/background.h" |
#include "ui/views/border.h" |
#include "ui/views/view.h" |
@@ -116,9 +118,12 @@ std::unique_ptr<DOM::Node> BuildDomNodeFromUIElement(UIElement* root) { |
} // namespace |
-AshDevToolsDOMAgent::AshDevToolsDOMAgent() : is_building_tree_(false) {} |
+AshDevToolsDOMAgent::AshDevToolsDOMAgent() : is_building_tree_(false) { |
+ aura::Env::GetInstance()->AddObserver(this); |
+} |
AshDevToolsDOMAgent::~AshDevToolsDOMAgent() { |
+ aura::Env::GetInstance()->RemoveObserver(this); |
Reset(); |
} |
@@ -209,6 +214,10 @@ UIElement* AshDevToolsDOMAgent::GetElementFromNodeId(int node_id) { |
return node_id_to_ui_element_[node_id]; |
} |
+void AshDevToolsDOMAgent::OnHostInitialized(aura::WindowTreeHost* host) { |
+ root_windows_.push_back(host->window()); |
+} |
+ |
void AshDevToolsDOMAgent::OnNodeBoundsChanged(int node_id) { |
for (auto& observer : observers_) |
observer.OnNodeBoundsChanged(node_id); |
@@ -224,7 +233,7 @@ AshDevToolsDOMAgent::BuildInitialTree() { |
window_element_root_ = |
base::MakeUnique<WindowElement>(nullptr, this, nullptr); |
- for (aura::Window* window : Shell::GetAllRootWindows()) { |
+ for (aura::Window* window : root_windows()) { |
UIElement* window_element = |
new WindowElement(window, this, window_element_root_.get()); |
@@ -338,10 +347,6 @@ void AshDevToolsDOMAgent::InitializeHighlightingWidget() { |
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
params.opacity = views::Widget::InitParams::WindowOpacity::TRANSLUCENT_WINDOW; |
params.name = "HighlightingWidget"; |
- Shell::GetPrimaryRootWindowController() |
- ->ConfigureWidgetInitParamsForContainer(widget_for_highlighting_.get(), |
- kShellWindowId_OverlayContainer, |
- ¶ms); |
params.keep_on_top = true; |
params.accept_events = false; |
widget_for_highlighting_->Init(params); |
@@ -359,8 +364,18 @@ void AshDevToolsDOMAgent::UpdateHighlight( |
display::Display display = |
display::Screen::GetScreen()->GetDisplayNearestWindow( |
window_and_bounds.first); |
- widget_for_highlighting_->GetNativeWindow()->SetBoundsInScreen( |
- window_and_bounds.second, display); |
+ aura::Window* root = window_and_bounds.first->GetRootWindow(); |
+ if (root != widget_for_highlighting_->GetNativeWindow()->GetRootWindow()) |
+ root->AddChild(widget_for_highlighting_->GetNativeWindow()); |
+ |
+ aura::client::ScreenPositionClient* screen_position_client = |
+ aura::client::GetScreenPositionClient(root); |
+ |
+ gfx::Rect bounds(window_and_bounds.second); |
+ gfx::Point origin = bounds.origin(); |
+ screen_position_client->ConvertPointFromScreen(root, &origin); |
+ bounds.set_origin(origin); |
+ widget_for_highlighting_->GetNativeWindow()->SetBounds(bounds); |
} |
ui::devtools::protocol::Response AshDevToolsDOMAgent::HighlightNode( |