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 @@
#include "ui/aura/window_observer.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/mus/mus_client.h"
#include "ui/views/widget/desktop_aura/desktop_screen_position_client.h"
namespace views {
......@@ -133,6 +134,8 @@ void RemoteViewProvider::OnEmbedTokenAvailable(
void RemoteViewProvider::OnEmbed(aura::Window* window) {
DCHECK(embedded_);
screen_position_client_ =
std::make_unique<DesktopScreenPositionClient>(window);
embedding_window_observer_ = std::make_unique<EmbeddingWindowObserver>(
window, base::BindRepeating(&RemoteViewProvider::OnEmbeddingWindowResized,
base::Unretained(this)));
......@@ -144,6 +147,7 @@ void RemoteViewProvider::OnEmbed(aura::Window* window) {
}
void RemoteViewProvider::OnUnembed() {
screen_position_client_.reset();
embedding_window_observer_.reset();
embed_root_.reset();
......
......@@ -24,6 +24,8 @@ class Size;
namespace views {
class DesktopScreenPositionClient;
namespace test {
class RemoteViewProviderTestApi;
}
......@@ -90,6 +92,10 @@ class RemoteViewProvider : public aura::EmbedRootDelegate {
// Observes the embeddding window provided by embedder.
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);
};
......
......@@ -15,6 +15,7 @@
#include "ui/aura/test/mus/test_window_tree.h"
#include "ui/aura/window.h"
#include "ui/aura/window_tracker.h"
#include "ui/aura/window_tree_host.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/views/mus/remote_view/remote_view_provider_test_api.h"
......@@ -171,4 +172,20 @@ TEST_F(RemoteViewProviderTest, EmbedAgain) {
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
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