Commit 90845ab7 authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

views: make RemoteViewProvider install ScreenPositionClient

This way Window::GetBoundsInScreen() returns screen coordinates.

BUG=none
TEST=covered by tests

Change-Id: I701247ec7005b3f8bcedacbe7345154b51287a67
Reviewed-on: https://chromium-review.googlesource.com/c/1359305Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#613284}
parent 64103b17
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "ui/aura/window_observer.h" #include "ui/aura/window_observer.h"
#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size.h"
#include "ui/views/mus/mus_client.h" #include "ui/views/mus/mus_client.h"
#include "ui/views/widget/desktop_aura/desktop_screen_position_client.h"
namespace views { namespace views {
...@@ -133,6 +134,8 @@ void RemoteViewProvider::OnEmbedTokenAvailable( ...@@ -133,6 +134,8 @@ void RemoteViewProvider::OnEmbedTokenAvailable(
void RemoteViewProvider::OnEmbed(aura::Window* window) { void RemoteViewProvider::OnEmbed(aura::Window* window) {
DCHECK(embedded_); DCHECK(embedded_);
screen_position_client_ =
std::make_unique<DesktopScreenPositionClient>(window);
embedding_window_observer_ = std::make_unique<EmbeddingWindowObserver>( embedding_window_observer_ = std::make_unique<EmbeddingWindowObserver>(
window, base::BindRepeating(&RemoteViewProvider::OnEmbeddingWindowResized, window, base::BindRepeating(&RemoteViewProvider::OnEmbeddingWindowResized,
base::Unretained(this))); base::Unretained(this)));
...@@ -144,6 +147,7 @@ void RemoteViewProvider::OnEmbed(aura::Window* window) { ...@@ -144,6 +147,7 @@ void RemoteViewProvider::OnEmbed(aura::Window* window) {
} }
void RemoteViewProvider::OnUnembed() { void RemoteViewProvider::OnUnembed() {
screen_position_client_.reset();
embedding_window_observer_.reset(); embedding_window_observer_.reset();
embed_root_.reset(); embed_root_.reset();
......
...@@ -24,6 +24,8 @@ class Size; ...@@ -24,6 +24,8 @@ class Size;
namespace views { namespace views {
class DesktopScreenPositionClient;
namespace test { namespace test {
class RemoteViewProviderTestApi; class RemoteViewProviderTestApi;
} }
...@@ -90,6 +92,10 @@ class RemoteViewProvider : public aura::EmbedRootDelegate { ...@@ -90,6 +92,10 @@ class RemoteViewProvider : public aura::EmbedRootDelegate {
// Observes the embeddding window provided by embedder. // Observes the embeddding window provided by embedder.
std::unique_ptr<EmbeddingWindowObserver> embedding_window_observer_; std::unique_ptr<EmbeddingWindowObserver> embedding_window_observer_;
// Installed on the WindowTreeHost's window. Installing this makes
// aura::Window::GetBoundsInScreen() work for any descendants.
std::unique_ptr<DesktopScreenPositionClient> screen_position_client_;
DISALLOW_COPY_AND_ASSIGN(RemoteViewProvider); DISALLOW_COPY_AND_ASSIGN(RemoteViewProvider);
}; };
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "ui/aura/test/mus/test_window_tree.h" #include "ui/aura/test/mus/test_window_tree.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
#include "ui/aura/window_tracker.h" #include "ui/aura/window_tracker.h"
#include "ui/aura/window_tree_host.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
#include "ui/views/mus/remote_view/remote_view_provider_test_api.h" #include "ui/views/mus/remote_view/remote_view_provider_test_api.h"
...@@ -171,4 +172,20 @@ TEST_F(RemoteViewProviderTest, EmbedAgain) { ...@@ -171,4 +172,20 @@ TEST_F(RemoteViewProviderTest, EmbedAgain) {
ASSERT_TRUE(new_embedder); ASSERT_TRUE(new_embedder);
} }
TEST_F(RemoteViewProviderTest, ScreenBounds) {
aura::Window* embedder = SimulateEmbed();
ASSERT_TRUE(embedder);
const viz::LocalSurfaceId server_changed_local_surface_id(
1, base::UnguessableToken::Create());
aura::Window* root_window = embedded_->GetRootWindow();
ASSERT_TRUE(root_window);
const gfx::Rect root_bounds(101, 102, 100, 50);
window_tree_client()->OnWindowBoundsChanged(
aura::WindowMus::Get(root_window)->server_id(), gfx::Rect(), root_bounds,
server_changed_local_surface_id);
EXPECT_EQ(root_bounds, root_window->GetHost()->GetBoundsInPixels());
EXPECT_EQ(root_bounds.origin(), root_window->GetBoundsInScreen().origin());
}
} // namespace views } // namespace views
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment