window-service: rename ServerWindow to ProxyWindow
And use the name 'proxy' in more places. BUG=none TEST=none Change-Id: I84309d4fd898b9571df8b78e756ae02f54dcbd8a Reviewed-on: https://chromium-review.googlesource.com/c/1377184 Commit-Queue: Scott Violet <sky@chromium.org> Reviewed-by: James Cook <jamescook@chromium.org> Cr-Commit-Position: refs/heads/master@{#616752}
This commit is contained in:
ash
services/ws
BUILD.gnclient_root.ccclient_root.hclient_root_test_helper.hevent_queue.ccfocus_handler.ccfocus_handler.hproxy_window.ccproxy_window.hproxy_window_test_helper.ccproxy_window_test_helper.hproxy_window_unittest.ccserver_window_test_helper.ccserver_window_test_helper.hwindow_delegate_impl.ccwindow_service.ccwindow_service.hwindow_service_unittest.ccwindow_tree.ccwindow_tree.hwindow_tree_test_helper.ccwindow_tree_test_helper.hwindow_tree_unittest.cc
@ -88,7 +88,7 @@ void PrintWindowHierarchy(ws::WindowService* window_service,
|
||||
const gfx::Vector2dF& subpixel_position_offset =
|
||||
window->layer()->subpixel_position_offset();
|
||||
*out << indent_str;
|
||||
if (window_service && ws::WindowService::HasRemoteClient(window))
|
||||
if (window_service && ws::WindowService::IsProxyWindow(window))
|
||||
*out << " [proxy] id=" << window_service->GetIdForDebugging(window) << " ";
|
||||
*out << name << " (" << window << ")"
|
||||
<< " type=" << window->type();
|
||||
|
@ -223,7 +223,7 @@ bool AshWindowTreeHostPlatform::ShouldSendKeyEventToIme() {
|
||||
// Don't send key events to IME if they are going to go to a remote client.
|
||||
// Remote clients handle forwarding to IME (as necessary).
|
||||
aura::Window* target = window()->targeter()->FindTargetForKeyEvent(window());
|
||||
return !target || !ws::WindowService::HasRemoteClient(target);
|
||||
return !target || !ws::WindowService::IsProxyWindow(target);
|
||||
}
|
||||
|
||||
void AshWindowTreeHostPlatform::SetTextInputState(
|
||||
|
@ -25,17 +25,17 @@ ImeFocusHandler::~ImeFocusHandler() {
|
||||
|
||||
void ImeFocusHandler::OnWindowFocused(aura::Window* gained_focus,
|
||||
aura::Window* lost_focus) {
|
||||
const bool client_window_gaining_focus =
|
||||
ws::WindowService::HasRemoteClient(gained_focus);
|
||||
const bool client_window_losing_focus =
|
||||
ws::WindowService::HasRemoteClient(lost_focus);
|
||||
const bool proxy_window_gaining_focus =
|
||||
ws::WindowService::IsProxyWindow(gained_focus);
|
||||
const bool proxy_window_losing_focus =
|
||||
ws::WindowService::IsProxyWindow(lost_focus);
|
||||
|
||||
// Focus moves to a ClientWindow from an ash window.
|
||||
if (client_window_gaining_focus && !client_window_losing_focus)
|
||||
// Focus moves to a ProxyWindow from an ash window.
|
||||
if (proxy_window_gaining_focus && !proxy_window_losing_focus)
|
||||
input_method_->OnBlur();
|
||||
|
||||
// Focus moves to an ash window from a ClientWindow.
|
||||
if (!client_window_gaining_focus && client_window_losing_focus)
|
||||
// Focus moves to an ash window from a ProxyWindow.
|
||||
if (!proxy_window_gaining_focus && proxy_window_losing_focus)
|
||||
input_method_->OnFocus();
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "ash/laser/laser_pointer_view.h"
|
||||
#include "ash/shell.h"
|
||||
#include "ash/test/ash_test_base.h"
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "ui/events/test/event_generator.h"
|
||||
|
||||
namespace ash {
|
||||
@ -158,11 +158,10 @@ TEST_F(LaserPointerControllerTest, LaserPointerPrediction) {
|
||||
TEST_F(LaserPointerControllerTest, LaserPointerWorksWithRemoteApp) {
|
||||
std::unique_ptr<aura::Window> window =
|
||||
CreateTestWindow(gfx::Rect(50, 50, 100, 100));
|
||||
ws::ServerWindow* server_window =
|
||||
ws::ServerWindow::GetMayBeNull(window.get());
|
||||
ASSERT_TRUE(server_window);
|
||||
ws::ProxyWindow* proxy_window = ws::ProxyWindow::GetMayBeNull(window.get());
|
||||
ASSERT_TRUE(proxy_window);
|
||||
// Setting the client area triggers slightly different logic.
|
||||
server_window->SetClientArea(gfx::Insets(10), std::vector<gfx::Rect>());
|
||||
proxy_window->SetClientArea(gfx::Insets(10), std::vector<gfx::Rect>());
|
||||
|
||||
// The laser pointer mode only works with stylus.
|
||||
ui::test::EventGenerator* event_generator = GetEventGenerator();
|
||||
|
@ -384,8 +384,8 @@ bool Shell::IsSystemModalWindowOpen() {
|
||||
}
|
||||
|
||||
// static
|
||||
bool Shell::HasRemoteClient(aura::Window* window) {
|
||||
return ws::WindowService::HasRemoteClient(window);
|
||||
bool Shell::IsProxyWindow(aura::Window* window) {
|
||||
return ws::WindowService::IsProxyWindow(window);
|
||||
}
|
||||
|
||||
// static
|
||||
|
@ -267,9 +267,10 @@ class ASH_EXPORT Shell : public SessionObserver,
|
||||
// Returns true if a system-modal dialog window is currently open.
|
||||
static bool IsSystemModalWindowOpen();
|
||||
|
||||
// Whether |window| hosts a remote client (e.g. the keyboard shortcut viewer
|
||||
// app under classic ash, or a browser window under mash).
|
||||
static bool HasRemoteClient(aura::Window* window);
|
||||
// Returns true if |window| is a proxy window. A proxy window is a window that
|
||||
// was created by way of a WindowService client (e.g. the keyboard shortcut
|
||||
// viewer app under classic ash, or a browser window under mash).
|
||||
static bool IsProxyWindow(aura::Window* window);
|
||||
|
||||
// Registers all ash related local state prefs to the given |registry|.
|
||||
static void RegisterLocalStatePrefs(PrefRegistrySimple* registry,
|
||||
|
@ -73,7 +73,7 @@ bool IsTopLevelWindow(aura::Window* window) {
|
||||
!window->delegate()) {
|
||||
return false;
|
||||
}
|
||||
if (ws::WindowService::HasRemoteClient(window))
|
||||
if (ws::WindowService::IsProxyWindow(window))
|
||||
return ws::WindowService::IsTopLevelWindow(window);
|
||||
return true;
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ bool IsTopLevelWindow(aura::Window* window) {
|
||||
// ui::LAYER_TEXTURED is for non-mash environment. For Mash, browser windows
|
||||
// are not with LAYER_TEXTURED but have a remote client.
|
||||
return window->layer()->type() == ui::LAYER_TEXTURED ||
|
||||
ws::WindowService::HasRemoteClient(window);
|
||||
ws::WindowService::IsProxyWindow(window);
|
||||
}
|
||||
|
||||
// Returns true if |window| can be a target at |screen_point| by |targeter|.
|
||||
|
@ -28,7 +28,7 @@ ws::Id GetTransportId(aura::Window* window) {
|
||||
} // namespace
|
||||
|
||||
bool IsProxyWindow(aura::Window* window) {
|
||||
return ws::WindowService::HasRemoteClient(window);
|
||||
return ws::WindowService::IsProxyWindow(window);
|
||||
}
|
||||
|
||||
aura::Window* GetProxyWindowForClientWindow(aura::Window* window) {
|
||||
|
@ -52,12 +52,12 @@ component("lib") {
|
||||
"host_event_queue.cc",
|
||||
"injected_event_handler.cc",
|
||||
"injected_event_handler.h",
|
||||
"proxy_window.cc",
|
||||
"proxy_window.h",
|
||||
"remoting_event_injector.cc",
|
||||
"remoting_event_injector.h",
|
||||
"screen_provider.cc",
|
||||
"screen_provider.h",
|
||||
"server_window.cc",
|
||||
"server_window.h",
|
||||
"topmost_window_observer.cc",
|
||||
"topmost_window_observer.h",
|
||||
"user_activity_monitor.cc",
|
||||
@ -133,8 +133,8 @@ static_library("test_support") {
|
||||
"event_queue_test_helper.h",
|
||||
"event_test_utils.cc",
|
||||
"event_test_utils.h",
|
||||
"server_window_test_helper.cc",
|
||||
"server_window_test_helper.h",
|
||||
"proxy_window_test_helper.cc",
|
||||
"proxy_window_test_helper.h",
|
||||
"test_change_tracker.cc",
|
||||
"test_change_tracker.h",
|
||||
"test_host_event_dispatcher.cc",
|
||||
@ -213,8 +213,8 @@ source_set("tests") {
|
||||
"event_queue_unittest.cc",
|
||||
"focus_handler_unittest.cc",
|
||||
"injected_event_handler_unittest.cc",
|
||||
"proxy_window_unittest.cc",
|
||||
"screen_provider_unittest.cc",
|
||||
"server_window_unittest.cc",
|
||||
"topmost_window_observer_unittest.cc",
|
||||
"user_activity_monitor_unittest.cc",
|
||||
"window_delegate_impl_unittest.cc",
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "components/viz/host/host_frame_sink_manager.h"
|
||||
#include "services/ws/client_change.h"
|
||||
#include "services/ws/client_change_tracker.h"
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "services/ws/window_service.h"
|
||||
#include "services/ws/window_tree.h"
|
||||
#include "ui/aura/client/screen_position_client.h"
|
||||
@ -47,15 +47,14 @@ ClientRoot::ClientRoot(WindowTree* window_tree,
|
||||
}
|
||||
|
||||
ClientRoot::~ClientRoot() {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window_);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window_);
|
||||
window_->RemoveObserver(this);
|
||||
if (window_->GetHost())
|
||||
window_->GetHost()->RemoveObserver(this);
|
||||
|
||||
viz::HostFrameSinkManager* host_frame_sink_manager =
|
||||
window_->env()->context_factory_private()->GetHostFrameSinkManager();
|
||||
host_frame_sink_manager->InvalidateFrameSinkId(
|
||||
server_window->frame_sink_id());
|
||||
host_frame_sink_manager->InvalidateFrameSinkId(proxy_window->frame_sink_id());
|
||||
}
|
||||
|
||||
void ClientRoot::SetClientAreaInsets(const gfx::Insets& client_area_insets) {
|
||||
@ -70,7 +69,7 @@ void ClientRoot::RegisterVizEmbeddingSupport() {
|
||||
viz::HostFrameSinkManager* host_frame_sink_manager =
|
||||
window_->env()->context_factory_private()->GetHostFrameSinkManager();
|
||||
viz::FrameSinkId frame_sink_id =
|
||||
ServerWindow::GetMayBeNull(window_)->frame_sink_id();
|
||||
ProxyWindow::GetMayBeNull(window_)->frame_sink_id();
|
||||
host_frame_sink_manager->RegisterFrameSinkId(
|
||||
frame_sink_id, this, viz::ReportFirstSurfaceActivation::kYes);
|
||||
window_->SetEmbedFrameSinkId(frame_sink_id);
|
||||
@ -83,8 +82,8 @@ bool ClientRoot::ShouldAssignLocalSurfaceId() {
|
||||
// WindowService. First level embeddings have no embeddings above them.
|
||||
if (is_top_level_)
|
||||
return true;
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window_);
|
||||
return server_window->owning_window_tree() == nullptr;
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window_);
|
||||
return proxy_window->owning_window_tree() == nullptr;
|
||||
}
|
||||
|
||||
void ClientRoot::UpdateLocalSurfaceIdIfNecessary() {
|
||||
@ -93,14 +92,14 @@ void ClientRoot::UpdateLocalSurfaceIdIfNecessary() {
|
||||
|
||||
gfx::Size size_in_pixels =
|
||||
ui::ConvertSizeToPixel(window_->layer(), window_->bounds().size());
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window_);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window_);
|
||||
// It's expected by cc code that any time the size changes a new
|
||||
// LocalSurfaceId is used.
|
||||
if (last_surface_size_in_pixels_ != size_in_pixels ||
|
||||
!server_window->local_surface_id().has_value() ||
|
||||
!proxy_window->local_surface_id().has_value() ||
|
||||
last_device_scale_factor_ != window_->layer()->device_scale_factor()) {
|
||||
parent_local_surface_id_allocator_.GenerateId();
|
||||
server_window->set_local_surface_id(
|
||||
proxy_window->set_local_surface_id(
|
||||
parent_local_surface_id_allocator_.GetCurrentLocalSurfaceIdAllocation()
|
||||
.local_surface_id());
|
||||
last_surface_size_in_pixels_ = size_in_pixels;
|
||||
@ -116,28 +115,28 @@ void ClientRoot::OnLocalSurfaceIdChanged() {
|
||||
: window_->bounds());
|
||||
}
|
||||
|
||||
void ClientRoot::AttachChildFrameSinkId(ServerWindow* server_window) {
|
||||
DCHECK(server_window->attached_frame_sink_id().is_valid());
|
||||
DCHECK(ServerWindow::GetMayBeNull(window_)->frame_sink_id().is_valid());
|
||||
void ClientRoot::AttachChildFrameSinkId(ProxyWindow* proxy_window) {
|
||||
DCHECK(proxy_window->attached_frame_sink_id().is_valid());
|
||||
DCHECK(ProxyWindow::GetMayBeNull(window_)->frame_sink_id().is_valid());
|
||||
viz::HostFrameSinkManager* host_frame_sink_manager =
|
||||
window_->env()->context_factory_private()->GetHostFrameSinkManager();
|
||||
const viz::FrameSinkId& frame_sink_id =
|
||||
server_window->attached_frame_sink_id();
|
||||
proxy_window->attached_frame_sink_id();
|
||||
if (host_frame_sink_manager->IsFrameSinkIdRegistered(frame_sink_id)) {
|
||||
host_frame_sink_manager->RegisterFrameSinkHierarchy(
|
||||
ServerWindow::GetMayBeNull(window_)->frame_sink_id(), frame_sink_id);
|
||||
ProxyWindow::GetMayBeNull(window_)->frame_sink_id(), frame_sink_id);
|
||||
}
|
||||
}
|
||||
|
||||
void ClientRoot::UnattachChildFrameSinkId(ServerWindow* server_window) {
|
||||
DCHECK(server_window->attached_frame_sink_id().is_valid());
|
||||
DCHECK(ServerWindow::GetMayBeNull(window_)->frame_sink_id().is_valid());
|
||||
void ClientRoot::UnattachChildFrameSinkId(ProxyWindow* proxy_window) {
|
||||
DCHECK(proxy_window->attached_frame_sink_id().is_valid());
|
||||
DCHECK(ProxyWindow::GetMayBeNull(window_)->frame_sink_id().is_valid());
|
||||
viz::HostFrameSinkManager* host_frame_sink_manager =
|
||||
window_->env()->context_factory_private()->GetHostFrameSinkManager();
|
||||
const viz::FrameSinkId& root_frame_sink_id =
|
||||
ServerWindow::GetMayBeNull(window_)->frame_sink_id();
|
||||
ProxyWindow::GetMayBeNull(window_)->frame_sink_id();
|
||||
const viz::FrameSinkId& window_frame_sink_id =
|
||||
server_window->attached_frame_sink_id();
|
||||
proxy_window->attached_frame_sink_id();
|
||||
if (host_frame_sink_manager->IsFrameSinkHierarchyRegistered(
|
||||
root_frame_sink_id, window_frame_sink_id)) {
|
||||
host_frame_sink_manager->UnregisterFrameSinkHierarchy(root_frame_sink_id,
|
||||
@ -145,35 +144,34 @@ void ClientRoot::UnattachChildFrameSinkId(ServerWindow* server_window) {
|
||||
}
|
||||
}
|
||||
|
||||
void ClientRoot::AttachChildFrameSinkIdRecursive(ServerWindow* server_window) {
|
||||
if (server_window->attached_frame_sink_id().is_valid())
|
||||
AttachChildFrameSinkId(server_window);
|
||||
void ClientRoot::AttachChildFrameSinkIdRecursive(ProxyWindow* proxy_window) {
|
||||
if (proxy_window->attached_frame_sink_id().is_valid())
|
||||
AttachChildFrameSinkId(proxy_window);
|
||||
|
||||
for (aura::Window* child : server_window->window()->children()) {
|
||||
ServerWindow* child_server_window = ServerWindow::GetMayBeNull(child);
|
||||
if (child_server_window->owning_window_tree() == window_tree_)
|
||||
AttachChildFrameSinkIdRecursive(child_server_window);
|
||||
for (aura::Window* child : proxy_window->window()->children()) {
|
||||
ProxyWindow* child_proxy_window = ProxyWindow::GetMayBeNull(child);
|
||||
if (child_proxy_window->owning_window_tree() == window_tree_)
|
||||
AttachChildFrameSinkIdRecursive(child_proxy_window);
|
||||
}
|
||||
}
|
||||
|
||||
void ClientRoot::UnattachChildFrameSinkIdRecursive(
|
||||
ServerWindow* server_window) {
|
||||
if (server_window->attached_frame_sink_id().is_valid())
|
||||
UnattachChildFrameSinkId(server_window);
|
||||
void ClientRoot::UnattachChildFrameSinkIdRecursive(ProxyWindow* proxy_window) {
|
||||
if (proxy_window->attached_frame_sink_id().is_valid())
|
||||
UnattachChildFrameSinkId(proxy_window);
|
||||
|
||||
for (aura::Window* child : server_window->window()->children()) {
|
||||
ServerWindow* child_server_window = ServerWindow::GetMayBeNull(child);
|
||||
if (child_server_window->owning_window_tree() == window_tree_)
|
||||
UnattachChildFrameSinkIdRecursive(child_server_window);
|
||||
for (aura::Window* child : proxy_window->window()->children()) {
|
||||
ProxyWindow* child_proxy_window = ProxyWindow::GetMayBeNull(child);
|
||||
if (child_proxy_window->owning_window_tree() == window_tree_)
|
||||
UnattachChildFrameSinkIdRecursive(child_proxy_window);
|
||||
}
|
||||
}
|
||||
|
||||
void ClientRoot::UpdatePrimarySurfaceId() {
|
||||
UpdateLocalSurfaceIdIfNecessary();
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window_);
|
||||
if (server_window->local_surface_id().has_value()) {
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window_);
|
||||
if (proxy_window->local_surface_id().has_value()) {
|
||||
client_surface_embedder_->SetSurfaceId(viz::SurfaceId(
|
||||
window_->GetFrameSinkId(), *server_window->local_surface_id()));
|
||||
window_->GetFrameSinkId(), *proxy_window->local_surface_id()));
|
||||
if (fallback_surface_info_) {
|
||||
client_surface_embedder_->SetFallbackSurfaceInfo(*fallback_surface_info_);
|
||||
fallback_surface_info_.reset();
|
||||
@ -203,7 +201,7 @@ void ClientRoot::NotifyClientOfNewBounds(const gfx::Rect& old_bounds) {
|
||||
last_bounds_ = window_->GetBoundsInScreen();
|
||||
window_tree_->window_tree_client_->OnWindowBoundsChanged(
|
||||
window_tree_->TransportIdForWindow(window_), old_bounds, last_bounds_,
|
||||
ServerWindow::GetMayBeNull(window_)->local_surface_id());
|
||||
ProxyWindow::GetMayBeNull(window_)->local_surface_id());
|
||||
}
|
||||
|
||||
void ClientRoot::OnPositionInRootChanged() {
|
||||
@ -303,8 +301,8 @@ void ClientRoot::OnHostResized(aura::WindowTreeHost* host) {
|
||||
|
||||
void ClientRoot::OnFirstSurfaceActivation(
|
||||
const viz::SurfaceInfo& surface_info) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window_);
|
||||
if (server_window->local_surface_id().has_value()) {
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window_);
|
||||
if (proxy_window->local_surface_id().has_value()) {
|
||||
DCHECK(!fallback_surface_info_);
|
||||
if (!client_surface_embedder_->HasPrimarySurfaceId())
|
||||
UpdatePrimarySurfaceId();
|
||||
@ -315,7 +313,7 @@ void ClientRoot::OnFirstSurfaceActivation(
|
||||
if (!window_tree_->client_name().empty()) {
|
||||
// OnFirstSurfaceActivation() should only be called after
|
||||
// AttachCompositorFrameSink().
|
||||
DCHECK(server_window->attached_compositor_frame_sink());
|
||||
DCHECK(proxy_window->attached_compositor_frame_sink());
|
||||
window_tree_->window_service()->OnFirstSurfaceActivation(
|
||||
window_tree_->client_name());
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ class SurfaceInfo;
|
||||
|
||||
namespace ws {
|
||||
|
||||
class ServerWindow;
|
||||
class ProxyWindow;
|
||||
class WindowTree;
|
||||
|
||||
// WindowTree creates a ClientRoot for each window the client is embedded in. A
|
||||
@ -68,15 +68,15 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) ClientRoot
|
||||
// Called when the LocalSurfaceId of the embedder changes.
|
||||
void OnLocalSurfaceIdChanged();
|
||||
|
||||
// Attaches/unattaches server_window->attached_frame_sink_id() to the
|
||||
// Attaches/unattaches proxy_window->attached_frame_sink_id() to the
|
||||
// HostFrameSinkManager.
|
||||
void AttachChildFrameSinkId(ServerWindow* server_window);
|
||||
void UnattachChildFrameSinkId(ServerWindow* server_window);
|
||||
void AttachChildFrameSinkId(ProxyWindow* proxy_window);
|
||||
void UnattachChildFrameSinkId(ProxyWindow* proxy_window);
|
||||
|
||||
// Recurses through all descendants with the same WindowTree calling
|
||||
// AttachChildFrameSinkId()/UnattachChildFrameSinkId().
|
||||
void AttachChildFrameSinkIdRecursive(ServerWindow* server_window);
|
||||
void UnattachChildFrameSinkIdRecursive(ServerWindow* server_window);
|
||||
void AttachChildFrameSinkIdRecursive(ProxyWindow* proxy_window);
|
||||
void UnattachChildFrameSinkIdRecursive(ProxyWindow* proxy_window);
|
||||
|
||||
private:
|
||||
friend class ClientRootTestHelper;
|
||||
|
@ -16,7 +16,7 @@ namespace ws {
|
||||
|
||||
class ClientRoot;
|
||||
|
||||
// Used for accessing private members of ServerWindow in tests.
|
||||
// Used for accessing private members of ClientRoot in tests.
|
||||
class ClientRootTestHelper {
|
||||
public:
|
||||
explicit ClientRootTestHelper(ClientRoot* client_root);
|
||||
|
@ -79,7 +79,7 @@ bool EventQueue::ShouldQueueEvent(HostEventQueue* host_queue,
|
||||
DCHECK(targeter);
|
||||
aura::Window* target =
|
||||
targeter->FindTargetForKeyEvent(host_queue->window_tree_host()->window());
|
||||
return target && WindowService::HasRemoteClient(target);
|
||||
return target && WindowService::IsProxyWindow(target);
|
||||
}
|
||||
|
||||
void EventQueue::NotifyWhenReadyToDispatch(base::OnceClosure closure) {
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "services/ws/client_change.h"
|
||||
#include "services/ws/client_change_tracker.h"
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "services/ws/window_properties.h"
|
||||
#include "services/ws/window_service.h"
|
||||
#include "services/ws/window_service_delegate.h"
|
||||
@ -43,17 +43,17 @@ bool FocusHandler::SetFocus(aura::Window* window) {
|
||||
|
||||
aura::client::FocusClient* focus_client =
|
||||
window_tree_->window_service_->focus_client();
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (window == focus_client->GetFocusedWindow()) {
|
||||
if (server_window->focus_owner() != window_tree_) {
|
||||
if (proxy_window->focus_owner() != window_tree_) {
|
||||
// The focused window didn't change, but the client that owns focus did
|
||||
// (see |ServerWindow::focus_owner_| for details on this). Notify the
|
||||
// (see |ProxyWindow::focus_owner_| for details on this). Notify the
|
||||
// current owner that it lost focus.
|
||||
if (server_window->focus_owner()) {
|
||||
server_window->focus_owner()->window_tree_client_->OnWindowFocused(
|
||||
if (proxy_window->focus_owner()) {
|
||||
proxy_window->focus_owner()->window_tree_client_->OnWindowFocused(
|
||||
kInvalidTransportId);
|
||||
}
|
||||
server_window->set_focus_owner(window_tree_);
|
||||
proxy_window->set_focus_owner(window_tree_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -75,8 +75,8 @@ bool FocusHandler::SetFocus(aura::Window* window) {
|
||||
<< " failed for " << window->GetName() << ")";
|
||||
return false;
|
||||
}
|
||||
if (server_window)
|
||||
server_window->set_focus_owner(window_tree_);
|
||||
if (proxy_window)
|
||||
proxy_window->set_focus_owner(window_tree_);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -88,8 +88,8 @@ bool FocusHandler::SetFocus(aura::Window* window) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (server_window)
|
||||
server_window->set_focus_owner(window_tree_);
|
||||
if (proxy_window)
|
||||
proxy_window->set_focus_owner(window_tree_);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -113,12 +113,12 @@ bool FocusHandler::IsFocusableWindow(aura::Window* window) const {
|
||||
window_tree_->IsClientRootWindow(window));
|
||||
}
|
||||
|
||||
bool FocusHandler::IsEmbeddedClient(ServerWindow* server_window) const {
|
||||
return server_window->embedded_window_tree() == window_tree_;
|
||||
bool FocusHandler::IsEmbeddedClient(ProxyWindow* proxy_window) const {
|
||||
return proxy_window->embedded_window_tree() == window_tree_;
|
||||
}
|
||||
|
||||
bool FocusHandler::IsOwningClient(ServerWindow* server_window) const {
|
||||
return server_window->owning_window_tree() == window_tree_;
|
||||
bool FocusHandler::IsOwningClient(ProxyWindow* proxy_window) const {
|
||||
return proxy_window->owning_window_tree() == window_tree_;
|
||||
}
|
||||
|
||||
void FocusHandler::OnWindowFocused(aura::Window* gained_focus,
|
||||
@ -137,11 +137,11 @@ void FocusHandler::OnWindowFocused(aura::Window* gained_focus,
|
||||
// Prefer the embedded client over the owning client.
|
||||
bool notified_gained = false;
|
||||
if (gained_focus) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(gained_focus);
|
||||
if (server_window && (IsEmbeddedClient(server_window) ||
|
||||
(!server_window->embedded_window_tree() &&
|
||||
IsOwningClient(server_window)))) {
|
||||
server_window->set_focus_owner(window_tree_);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(gained_focus);
|
||||
if (proxy_window && (IsEmbeddedClient(proxy_window) ||
|
||||
(!proxy_window->embedded_window_tree() &&
|
||||
IsOwningClient(proxy_window)))) {
|
||||
proxy_window->set_focus_owner(window_tree_);
|
||||
window_tree_->window_tree_client_->OnWindowFocused(
|
||||
window_tree_->TransportIdForWindow(gained_focus));
|
||||
notified_gained = true;
|
||||
@ -149,9 +149,9 @@ void FocusHandler::OnWindowFocused(aura::Window* gained_focus,
|
||||
}
|
||||
|
||||
if (lost_focus && !notified_gained) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(lost_focus);
|
||||
if (server_window && server_window->focus_owner() == window_tree_) {
|
||||
server_window->set_focus_owner(nullptr);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(lost_focus);
|
||||
if (proxy_window && proxy_window->focus_owner() == window_tree_) {
|
||||
proxy_window->set_focus_owner(nullptr);
|
||||
window_tree_->window_tree_client_->OnWindowFocused(kInvalidTransportId);
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ class Window;
|
||||
|
||||
namespace ws {
|
||||
|
||||
class ServerWindow;
|
||||
class ProxyWindow;
|
||||
class WindowTree;
|
||||
|
||||
// FocusHandler handles focus requests from the client, as well as notifying
|
||||
@ -34,8 +34,8 @@ class FocusHandler : public aura::client::FocusChangeObserver {
|
||||
// Returns true if |window| can be focused.
|
||||
bool IsFocusableWindow(aura::Window* window) const;
|
||||
|
||||
bool IsEmbeddedClient(ServerWindow* server_window) const;
|
||||
bool IsOwningClient(ServerWindow* server_window) const;
|
||||
bool IsEmbeddedClient(ProxyWindow* proxy_window) const;
|
||||
bool IsOwningClient(ProxyWindow* proxy_window) const;
|
||||
|
||||
// aura::client::FocusChangeObserver:
|
||||
void OnWindowFocused(aura::Window* gained_focus,
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
@ -24,19 +24,19 @@
|
||||
#include "ui/wm/core/capture_controller.h"
|
||||
#include "ui/wm/core/window_modality_controller.h"
|
||||
|
||||
DEFINE_UI_CLASS_PROPERTY_TYPE(ws::ServerWindow*);
|
||||
DEFINE_UI_CLASS_PROPERTY_TYPE(ws::ProxyWindow*);
|
||||
|
||||
namespace ws {
|
||||
namespace {
|
||||
DEFINE_OWNED_UI_CLASS_PROPERTY_KEY(ServerWindow, kServerWindowKey, nullptr);
|
||||
DEFINE_OWNED_UI_CLASS_PROPERTY_KEY(ProxyWindow, kProxyWindowKey, nullptr);
|
||||
|
||||
// Returns true if |location| is in the non-client area (or outside the bounds
|
||||
// of the window). A return value of false means the location is in the client
|
||||
// area.
|
||||
bool IsLocationInNonClientArea(const aura::Window* window,
|
||||
const gfx::Point& location) {
|
||||
const ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
if (!server_window || !server_window->IsTopLevel())
|
||||
const ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (!proxy_window || !proxy_window->IsTopLevel())
|
||||
return false;
|
||||
|
||||
// Locations inside bounds but within the resize insets count as non-client
|
||||
@ -57,11 +57,11 @@ bool IsLocationInNonClientArea(const aura::Window* window,
|
||||
}
|
||||
|
||||
gfx::Rect client_area(window->bounds().size());
|
||||
client_area.Inset(server_window->client_area());
|
||||
client_area.Inset(proxy_window->client_area());
|
||||
if (client_area.Contains(location))
|
||||
return false;
|
||||
|
||||
for (const auto& rect : server_window->additional_client_areas()) {
|
||||
for (const auto& rect : proxy_window->additional_client_areas()) {
|
||||
if (rect.Contains(location))
|
||||
return false;
|
||||
}
|
||||
@ -95,16 +95,16 @@ ui::PointerId GetPointerId(const ui::Event& event) {
|
||||
return event.AsTouchEvent()->pointer_details().id;
|
||||
}
|
||||
|
||||
// WindowTargeter used for ServerWindows. This is used for two purposes:
|
||||
// WindowTargeter used for ProxyWindows. This is used for two purposes:
|
||||
// . If the location is in the non-client area, then child Windows are not
|
||||
// considered. This is done to ensure the delegate of the window (which is
|
||||
// local) sees the event.
|
||||
// . To ensure |WindowTree::intercepts_events_| is honored.
|
||||
class ServerWindowTargeter : public aura::WindowTargeter {
|
||||
class ProxyWindowTargeter : public aura::WindowTargeter {
|
||||
public:
|
||||
explicit ServerWindowTargeter(ServerWindow* server_window)
|
||||
: server_window_(server_window) {}
|
||||
~ServerWindowTargeter() override = default;
|
||||
explicit ProxyWindowTargeter(ProxyWindow* proxy_window)
|
||||
: proxy_window_(proxy_window) {}
|
||||
~ProxyWindowTargeter() override = default;
|
||||
|
||||
// aura::WindowTargeter:
|
||||
bool SubtreeShouldBeExploredForEvent(aura::Window* window,
|
||||
@ -113,7 +113,7 @@ class ServerWindowTargeter : public aura::WindowTargeter {
|
||||
// parent's WindowTargeter. This is necessary for targeters such as
|
||||
// EasyResizeWindowTargeter to work correctly.
|
||||
if (mouse_extend().IsEmpty() && touch_extend().IsEmpty() &&
|
||||
server_window_->IsTopLevel() && window->parent()) {
|
||||
proxy_window_->IsTopLevel() && window->parent()) {
|
||||
aura::WindowTargeter* parent_targeter =
|
||||
static_cast<WindowTargeter*>(window->parent()->targeter());
|
||||
if (parent_targeter)
|
||||
@ -125,8 +125,8 @@ class ServerWindowTargeter : public aura::WindowTargeter {
|
||||
ui::EventTarget* FindTargetForEvent(ui::EventTarget* event_target,
|
||||
ui::Event* event) override {
|
||||
aura::Window* window = static_cast<aura::Window*>(event_target);
|
||||
DCHECK_EQ(window, server_window_->window());
|
||||
if (server_window_->DoesOwnerInterceptEvents()) {
|
||||
DCHECK_EQ(window, proxy_window_->window());
|
||||
if (proxy_window_->DoesOwnerInterceptEvents()) {
|
||||
// If the owner intercepts events, then don't recurse (otherwise events
|
||||
// would go to a descendant).
|
||||
return event_target->CanAcceptEvent(*event) ? window : nullptr;
|
||||
@ -143,28 +143,28 @@ class ServerWindowTargeter : public aura::WindowTargeter {
|
||||
}
|
||||
|
||||
private:
|
||||
ServerWindow* const server_window_;
|
||||
ProxyWindow* const proxy_window_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ServerWindowTargeter);
|
||||
DISALLOW_COPY_AND_ASSIGN(ProxyWindowTargeter);
|
||||
};
|
||||
|
||||
// ServerWindowEventHandler is used to forward events to the client.
|
||||
// ServerWindowEventHandler adds itself to the pre-phase to ensure it's
|
||||
// ProxyWindowEventHandler is used to forward events to the client.
|
||||
// ProxyWindowEventHandler adds itself to the pre-phase to ensure it's
|
||||
// considered before the Window's delegate (or other EventHandlers).
|
||||
class ServerWindowEventHandler : public ui::EventHandler {
|
||||
class ProxyWindowEventHandler : public ui::EventHandler {
|
||||
public:
|
||||
explicit ServerWindowEventHandler(ServerWindow* server_window)
|
||||
: server_window_(server_window) {
|
||||
explicit ProxyWindowEventHandler(ProxyWindow* proxy_window)
|
||||
: proxy_window_(proxy_window) {
|
||||
// Use |kDefault| so as not to conflict with other important pre-target
|
||||
// handlers (such as laser pointer).
|
||||
window()->AddPreTargetHandler(this, ui::EventTarget::Priority::kDefault);
|
||||
}
|
||||
~ServerWindowEventHandler() override {
|
||||
~ProxyWindowEventHandler() override {
|
||||
window()->RemovePreTargetHandler(this);
|
||||
}
|
||||
|
||||
ServerWindow* server_window() { return server_window_; }
|
||||
aura::Window* window() { return server_window_->window(); }
|
||||
ProxyWindow* proxy_window() { return proxy_window_; }
|
||||
aura::Window* window() { return proxy_window_->window(); }
|
||||
|
||||
// ui::EventHandler:
|
||||
void OnEvent(ui::Event* event) override {
|
||||
@ -178,19 +178,19 @@ class ServerWindowEventHandler : public ui::EventHandler {
|
||||
if (HandleInterceptedEvent(event) || ShouldIgnoreEvent(*event))
|
||||
return;
|
||||
|
||||
auto* owning = server_window_->owning_window_tree();
|
||||
auto* embedded = server_window_->embedded_window_tree();
|
||||
auto* owning = proxy_window_->owning_window_tree();
|
||||
auto* embedded = proxy_window_->embedded_window_tree();
|
||||
WindowTree* target_client = nullptr;
|
||||
if (server_window_->DoesOwnerInterceptEvents()) {
|
||||
if (proxy_window_->DoesOwnerInterceptEvents()) {
|
||||
// A client that intercepts events, always gets the event regardless of
|
||||
// focus/capture.
|
||||
target_client = owning;
|
||||
} else if (event->IsKeyEvent()) {
|
||||
if (!server_window_->focus_owner())
|
||||
if (!proxy_window_->focus_owner())
|
||||
return; // The local environment is going to process the event.
|
||||
target_client = server_window_->focus_owner();
|
||||
} else if (server_window()->capture_owner()) {
|
||||
target_client = server_window()->capture_owner();
|
||||
target_client = proxy_window_->focus_owner();
|
||||
} else if (proxy_window()->capture_owner()) {
|
||||
target_client = proxy_window()->capture_owner();
|
||||
} else {
|
||||
// Prefer embedded over owner.
|
||||
target_client = !embedded ? owning : embedded;
|
||||
@ -213,7 +213,7 @@ class ServerWindowEventHandler : public ui::EventHandler {
|
||||
return true;
|
||||
|
||||
if (static_cast<aura::Window*>(event.target()) != window()) {
|
||||
// As ServerWindow is a EP_PRETARGET EventHandler it gets events *before*
|
||||
// As ProxyWindow is a EP_PRETARGET EventHandler it gets events *before*
|
||||
// descendants. Ignore all such events, and only process when
|
||||
// window() is the the target.
|
||||
return true;
|
||||
@ -245,10 +245,10 @@ class ServerWindowEventHandler : public ui::EventHandler {
|
||||
return false;
|
||||
|
||||
// KeyEvents, and events when there is capture, do not go through through
|
||||
// ServerWindowTargeter. As a result ServerWindowEventHandler has to check
|
||||
// ProxyWindowTargeter. As a result ProxyWindowEventHandler has to check
|
||||
// for a client intercepting events.
|
||||
if (server_window_->DoesOwnerInterceptEvents()) {
|
||||
server_window_->owning_window_tree()->SendEventToClient(window(), *event);
|
||||
if (proxy_window_->DoesOwnerInterceptEvents()) {
|
||||
proxy_window_->owning_window_tree()->SendEventToClient(window(), *event);
|
||||
if (event->cancelable())
|
||||
event->StopPropagation();
|
||||
return true;
|
||||
@ -257,9 +257,9 @@ class ServerWindowEventHandler : public ui::EventHandler {
|
||||
}
|
||||
|
||||
private:
|
||||
ServerWindow* const server_window_;
|
||||
ProxyWindow* const proxy_window_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ServerWindowEventHandler);
|
||||
DISALLOW_COPY_AND_ASSIGN(ProxyWindowEventHandler);
|
||||
};
|
||||
|
||||
class TopLevelEventHandler;
|
||||
@ -300,13 +300,13 @@ class PointerPressHandler : public aura::client::CaptureClientObserver,
|
||||
// area are not sent to the client, instead are handled locally. For example,
|
||||
// if a press occurs in the non-client area, then the event is not sent to
|
||||
// the client, it's handled locally.
|
||||
class TopLevelEventHandler : public ServerWindowEventHandler {
|
||||
class TopLevelEventHandler : public ProxyWindowEventHandler {
|
||||
public:
|
||||
explicit TopLevelEventHandler(ServerWindow* server_window)
|
||||
: ServerWindowEventHandler(server_window) {
|
||||
explicit TopLevelEventHandler(ProxyWindow* proxy_window)
|
||||
: ProxyWindowEventHandler(proxy_window) {
|
||||
// Top-levels should always have an owning_window_tree().
|
||||
// OnEvent() assumes this.
|
||||
DCHECK(server_window->owning_window_tree());
|
||||
DCHECK(proxy_window->owning_window_tree());
|
||||
}
|
||||
|
||||
~TopLevelEventHandler() override = default;
|
||||
@ -330,7 +330,7 @@ class TopLevelEventHandler : public ServerWindowEventHandler {
|
||||
pointer_press_handlers_.clear();
|
||||
}
|
||||
|
||||
// ServerWindowEventHandler:
|
||||
// ProxyWindowEventHandler:
|
||||
void OnEvent(ui::Event* event) override {
|
||||
if (event->phase() != ui::EP_PRETARGET) {
|
||||
// All work is done in the pre-phase. If this branch is hit, it means
|
||||
@ -343,7 +343,7 @@ class TopLevelEventHandler : public ServerWindowEventHandler {
|
||||
return;
|
||||
|
||||
if (!event->IsLocatedEvent()) {
|
||||
ServerWindowEventHandler::OnEvent(event);
|
||||
ProxyWindowEventHandler::OnEvent(event);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -353,8 +353,8 @@ class TopLevelEventHandler : public ServerWindowEventHandler {
|
||||
// If there is capture, send the event to the client that owns it. A null
|
||||
// capture owner means the local environment should handle the event.
|
||||
if (wm::CaptureController::Get()->GetCaptureWindow()) {
|
||||
if (server_window()->capture_owner()) {
|
||||
server_window()->capture_owner()->SendEventToClient(window(), *event);
|
||||
if (proxy_window()->capture_owner()) {
|
||||
proxy_window()->capture_owner()->SendEventToClient(window(), *event);
|
||||
if (event->cancelable())
|
||||
event->StopPropagation();
|
||||
return;
|
||||
@ -368,7 +368,7 @@ class TopLevelEventHandler : public ServerWindowEventHandler {
|
||||
// local, otherwise remote client.
|
||||
// . mouse-moves (not drags) go to both targets.
|
||||
bool stop_propagation = false;
|
||||
if (server_window()->HasNonClientArea() && IsPointerEvent(*event)) {
|
||||
if (proxy_window()->HasNonClientArea() && IsPointerEvent(*event)) {
|
||||
const ui::PointerId pointer_id = GetPointerId(*event);
|
||||
if (!pointer_press_handlers_.count(pointer_id)) {
|
||||
if (IsPointerPressedEvent(*event)) {
|
||||
@ -393,7 +393,7 @@ class TopLevelEventHandler : public ServerWindowEventHandler {
|
||||
stop_propagation = true;
|
||||
}
|
||||
}
|
||||
server_window()->owning_window_tree()->SendEventToClient(window(), *event);
|
||||
proxy_window()->owning_window_tree()->SendEventToClient(window(), *event);
|
||||
if (stop_propagation && event->cancelable())
|
||||
event->StopPropagation();
|
||||
}
|
||||
@ -439,47 +439,47 @@ void PointerPressHandler::OnWindowVisibilityChanged(aura::Window* window,
|
||||
|
||||
} // namespace
|
||||
|
||||
ServerWindow::~ServerWindow() {
|
||||
ProxyWindow::~ProxyWindow() {
|
||||
// WindowTree/ClientRoot should have reset |attached_frame_sink_id_| before
|
||||
// the Window is destroyed.
|
||||
DCHECK(!attached_frame_sink_id_.is_valid());
|
||||
}
|
||||
|
||||
// static
|
||||
ServerWindow* ServerWindow::Create(aura::Window* window,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level) {
|
||||
ProxyWindow* ProxyWindow::Create(aura::Window* window,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level) {
|
||||
DCHECK(!GetMayBeNull(window));
|
||||
// Owned by |window|.
|
||||
ServerWindow* server_window =
|
||||
new ServerWindow(window, tree, frame_sink_id, is_top_level);
|
||||
return server_window;
|
||||
ProxyWindow* proxy_window =
|
||||
new ProxyWindow(window, tree, frame_sink_id, is_top_level);
|
||||
return proxy_window;
|
||||
}
|
||||
|
||||
// static
|
||||
const ServerWindow* ServerWindow::GetMayBeNull(const aura::Window* window) {
|
||||
return window ? window->GetProperty(kServerWindowKey) : nullptr;
|
||||
const ProxyWindow* ProxyWindow::GetMayBeNull(const aura::Window* window) {
|
||||
return window ? window->GetProperty(kProxyWindowKey) : nullptr;
|
||||
}
|
||||
|
||||
void ServerWindow::Destroy() {
|
||||
void ProxyWindow::Destroy() {
|
||||
// This should only be called for windows created locally for an embedding
|
||||
// (not created by a remote client). Such windows do not have an owner.
|
||||
DCHECK(!owning_window_tree_);
|
||||
// static_cast is needed to determine which function SetProperty() applies
|
||||
// to.
|
||||
window_->SetProperty(kServerWindowKey, static_cast<ServerWindow*>(nullptr));
|
||||
window_->SetProperty(kProxyWindowKey, static_cast<ProxyWindow*>(nullptr));
|
||||
}
|
||||
|
||||
WindowTree* ServerWindow::embedded_window_tree() {
|
||||
WindowTree* ProxyWindow::embedded_window_tree() {
|
||||
return embedding_ ? embedding_->embedded_tree() : nullptr;
|
||||
}
|
||||
|
||||
const WindowTree* ServerWindow::embedded_window_tree() const {
|
||||
const WindowTree* ProxyWindow::embedded_window_tree() const {
|
||||
return embedding_ ? embedding_->embedded_tree() : nullptr;
|
||||
}
|
||||
|
||||
void ServerWindow::SetClientArea(
|
||||
void ProxyWindow::SetClientArea(
|
||||
const gfx::Insets& insets,
|
||||
const std::vector<gfx::Rect>& additional_client_areas) {
|
||||
if (client_area_ == insets &&
|
||||
@ -496,12 +496,12 @@ void ServerWindow::SetClientArea(
|
||||
client_root->SetClientAreaInsets(insets);
|
||||
}
|
||||
|
||||
void ServerWindow::SetHitTestInsets(const gfx::Insets& mouse,
|
||||
const gfx::Insets& touch) {
|
||||
void ProxyWindow::SetHitTestInsets(const gfx::Insets& mouse,
|
||||
const gfx::Insets& touch) {
|
||||
window_targeter_->SetInsets(mouse, touch);
|
||||
}
|
||||
|
||||
void ServerWindow::SetCaptureOwner(WindowTree* owner) {
|
||||
void ProxyWindow::SetCaptureOwner(WindowTree* owner) {
|
||||
capture_owner_ = owner;
|
||||
if (!IsTopLevel())
|
||||
return;
|
||||
@ -510,28 +510,28 @@ void ServerWindow::SetCaptureOwner(WindowTree* owner) {
|
||||
->OnCaptureOwnerChanged();
|
||||
}
|
||||
|
||||
void ServerWindow::StoreCursor(const ui::Cursor& cursor) {
|
||||
void ProxyWindow::StoreCursor(const ui::Cursor& cursor) {
|
||||
cursor_ = cursor;
|
||||
}
|
||||
|
||||
bool ServerWindow::DoesOwnerInterceptEvents() const {
|
||||
bool ProxyWindow::DoesOwnerInterceptEvents() const {
|
||||
return embedding_ && embedding_->embedding_tree_intercepts_events();
|
||||
}
|
||||
|
||||
void ServerWindow::SetEmbedding(std::unique_ptr<Embedding> embedding) {
|
||||
void ProxyWindow::SetEmbedding(std::unique_ptr<Embedding> embedding) {
|
||||
embedding_ = std::move(embedding);
|
||||
}
|
||||
|
||||
bool ServerWindow::HasNonClientArea() const {
|
||||
bool ProxyWindow::HasNonClientArea() const {
|
||||
return owning_window_tree_ && owning_window_tree_->IsTopLevel(window_) &&
|
||||
(!client_area_.IsEmpty() || !additional_client_areas_.empty());
|
||||
}
|
||||
|
||||
bool ServerWindow::IsTopLevel() const {
|
||||
bool ProxyWindow::IsTopLevel() const {
|
||||
return owning_window_tree_ && owning_window_tree_->IsTopLevel(window_);
|
||||
}
|
||||
|
||||
void ServerWindow::AttachCompositorFrameSink(
|
||||
void ProxyWindow::AttachCompositorFrameSink(
|
||||
viz::mojom::CompositorFrameSinkRequest compositor_frame_sink,
|
||||
viz::mojom::CompositorFrameSinkClientPtr client) {
|
||||
attached_compositor_frame_sink_ = true;
|
||||
@ -541,32 +541,32 @@ void ServerWindow::AttachCompositorFrameSink(
|
||||
frame_sink_id_, std::move(compositor_frame_sink), std::move(client));
|
||||
}
|
||||
|
||||
void ServerWindow::SetDragDropDelegate(
|
||||
void ProxyWindow::SetDragDropDelegate(
|
||||
std::unique_ptr<DragDropDelegate> drag_drop_delegate) {
|
||||
drag_drop_delegate_ = std::move(drag_drop_delegate);
|
||||
}
|
||||
|
||||
std::string ServerWindow::GetIdForDebugging() {
|
||||
std::string ProxyWindow::GetIdForDebugging() {
|
||||
return owning_window_tree_
|
||||
? owning_window_tree_->ClientWindowIdForWindow(window_).ToString()
|
||||
: frame_sink_id_.ToString();
|
||||
}
|
||||
|
||||
ServerWindow::ServerWindow(aura::Window* window,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level)
|
||||
ProxyWindow::ProxyWindow(aura::Window* window,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level)
|
||||
: window_(window),
|
||||
owning_window_tree_(tree),
|
||||
frame_sink_id_(frame_sink_id) {
|
||||
window_->SetProperty(kServerWindowKey, this);
|
||||
window_->SetProperty(kProxyWindowKey, this);
|
||||
if (is_top_level)
|
||||
event_handler_ = std::make_unique<TopLevelEventHandler>(this);
|
||||
else
|
||||
event_handler_ = std::make_unique<ServerWindowEventHandler>(this);
|
||||
auto server_window_targeter = std::make_unique<ServerWindowTargeter>(this);
|
||||
window_targeter_ = server_window_targeter.get();
|
||||
window_->SetEventTargeter(std::move(server_window_targeter));
|
||||
event_handler_ = std::make_unique<ProxyWindowEventHandler>(this);
|
||||
auto proxy_window_targeter = std::make_unique<ProxyWindowTargeter>(this);
|
||||
window_targeter_ = proxy_window_targeter.get();
|
||||
window_->SetEventTargeter(std::move(proxy_window_targeter));
|
||||
// In order for a window to receive events it must have a target_handler()
|
||||
// (see Window::CanAcceptEvent()). Normally the delegate is the TargetHandler,
|
||||
// but if the delegate is null, then so is the target_handler(). Set
|
||||
@ -576,7 +576,7 @@ ServerWindow::ServerWindow(aura::Window* window,
|
||||
window_->SetTargetHandler(event_handler_.get());
|
||||
}
|
||||
|
||||
bool ServerWindow::IsHandlingPointerPressForTesting(ui::PointerId pointer_id) {
|
||||
bool ProxyWindow::IsHandlingPointerPressForTesting(ui::PointerId pointer_id) {
|
||||
DCHECK(IsTopLevel());
|
||||
return static_cast<TopLevelEventHandler*>(event_handler_.get())
|
||||
->IsHandlingPointerPress(pointer_id);
|
@ -2,8 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef SERVICES_WS_SERVER_WINDOW_H_
|
||||
#define SERVICES_WS_SERVER_WINDOW_H_
|
||||
#ifndef SERVICES_WS_PROXY_WINDOW_H_
|
||||
#define SERVICES_WS_PROXY_WINDOW_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -36,29 +36,29 @@ class Embedding;
|
||||
class WindowTree;
|
||||
|
||||
// Tracks any state associated with an aura::Window for the WindowService.
|
||||
// ServerWindow is created for every window created at the request of a client,
|
||||
// ProxyWindow is created for every window created at the request of a client,
|
||||
// including the root window of ClientRoots.
|
||||
class COMPONENT_EXPORT(WINDOW_SERVICE) ServerWindow {
|
||||
class COMPONENT_EXPORT(WINDOW_SERVICE) ProxyWindow {
|
||||
public:
|
||||
~ServerWindow();
|
||||
~ProxyWindow();
|
||||
|
||||
// Creates a new ServerWindow. The lifetime of the ServerWindow is tied to
|
||||
// that of the Window (the Window ends up owning the ServerWindow).
|
||||
// Creates a new ProxyWindow. The lifetime of the ProxyWindow is tied to
|
||||
// that of the Window (the Window ends up owning the ProxyWindow).
|
||||
// |is_top_level| is true if the window represents a top-level window.
|
||||
static ServerWindow* Create(aura::Window* window,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level);
|
||||
static ProxyWindow* Create(aura::Window* window,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level);
|
||||
|
||||
// Returns the ServerWindow associated with a window, null if not created yet.
|
||||
static ServerWindow* GetMayBeNull(aura::Window* window) {
|
||||
return const_cast<ServerWindow*>(
|
||||
// Returns the ProxyWindow associated with a window, null if not created yet.
|
||||
static ProxyWindow* GetMayBeNull(aura::Window* window) {
|
||||
return const_cast<ProxyWindow*>(
|
||||
GetMayBeNull(const_cast<const aura::Window*>(window)));
|
||||
}
|
||||
static const ServerWindow* GetMayBeNull(const aura::Window* window);
|
||||
static const ProxyWindow* GetMayBeNull(const aura::Window* window);
|
||||
|
||||
// Explicitly deletes this ServerWindow. This should very rarely be called.
|
||||
// The typical use case is ServerWindow is owned by the aura::Window, and
|
||||
// Explicitly deletes this ProxyWindow. This should very rarely be called.
|
||||
// The typical use case is ProxyWindow is owned by the aura::Window, and
|
||||
// deleted when the associated window is deleted.
|
||||
void Destroy();
|
||||
|
||||
@ -143,12 +143,12 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) ServerWindow {
|
||||
std::string GetIdForDebugging();
|
||||
|
||||
private:
|
||||
friend class ServerWindowTestHelper;
|
||||
friend class ProxyWindowTestHelper;
|
||||
|
||||
ServerWindow(aura::Window*,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level);
|
||||
ProxyWindow(aura::Window*,
|
||||
WindowTree* tree,
|
||||
const viz::FrameSinkId& frame_sink_id,
|
||||
bool is_top_level);
|
||||
|
||||
// Forwards to TopLevelEventHandler, see it for details.
|
||||
// NOTE: this is only applicable to top-levels.
|
||||
@ -209,9 +209,9 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) ServerWindow {
|
||||
// FrameSinkId set by way of mojom::WindowTree::AttachFrameSinkId().
|
||||
viz::FrameSinkId attached_frame_sink_id_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ServerWindow);
|
||||
DISALLOW_COPY_AND_ASSIGN(ProxyWindow);
|
||||
};
|
||||
|
||||
} // namespace ws
|
||||
|
||||
#endif // SERVICES_WS_SERVER_WINDOW_H_
|
||||
#endif // SERVICES_WS_PROXY_WINDOW_H_
|
20
services/ws/proxy_window_test_helper.cc
Normal file
20
services/ws/proxy_window_test_helper.cc
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright 2018 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "services/ws/proxy_window_test_helper.h"
|
||||
|
||||
#include "services/ws/proxy_window.h"
|
||||
|
||||
namespace ws {
|
||||
|
||||
ProxyWindowTestHelper::ProxyWindowTestHelper(ProxyWindow* proxy_window)
|
||||
: proxy_window_(proxy_window) {}
|
||||
|
||||
ProxyWindowTestHelper::~ProxyWindowTestHelper() = default;
|
||||
|
||||
bool ProxyWindowTestHelper::IsHandlingPointerPress(ui::PointerId pointer_id) {
|
||||
return proxy_window_->IsHandlingPointerPressForTesting(pointer_id);
|
||||
}
|
||||
|
||||
} // namespace ws
|
31
services/ws/proxy_window_test_helper.h
Normal file
31
services/ws/proxy_window_test_helper.h
Normal file
@ -0,0 +1,31 @@
|
||||
// Copyright 2018 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef SERVICES_WS_PROXY_WINDOW_TEST_HELPER_H_
|
||||
#define SERVICES_WS_PROXY_WINDOW_TEST_HELPER_H_
|
||||
|
||||
#include "base/macros.h"
|
||||
#include "ui/events/event.h"
|
||||
|
||||
namespace ws {
|
||||
|
||||
class ProxyWindow;
|
||||
|
||||
// Used for accessing private members of ProxyWindow in tests.
|
||||
class ProxyWindowTestHelper {
|
||||
public:
|
||||
explicit ProxyWindowTestHelper(ProxyWindow* proxy_window);
|
||||
~ProxyWindowTestHelper();
|
||||
|
||||
bool IsHandlingPointerPress(ui::PointerId pointer_id);
|
||||
|
||||
private:
|
||||
ProxyWindow* proxy_window_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ProxyWindowTestHelper);
|
||||
};
|
||||
|
||||
} // namespace ws
|
||||
|
||||
#endif // SERVICES_WS_PROXY_WINDOW_TEST_HELPER_H_
|
@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
|
||||
namespace ws {
|
||||
|
||||
TEST(ServerWindow, FindTargetForWindowWithEasyResizeTargeter) {
|
||||
TEST(ProxyWindow, FindTargetForWindowWithEasyResizeTargeter) {
|
||||
WindowServiceTestSetup setup;
|
||||
std::unique_ptr<wm::EasyResizeWindowTargeter> easy_resize_window_targeter =
|
||||
std::make_unique<wm::EasyResizeWindowTargeter>(
|
||||
@ -51,7 +51,7 @@ TEST(ServerWindow, FindTargetForWindowWithEasyResizeTargeter) {
|
||||
setup.root(), &mouse_event2));
|
||||
}
|
||||
|
||||
TEST(ServerWindow, FindTargetForWindowWithResizeInset) {
|
||||
TEST(ProxyWindow, FindTargetForWindowWithResizeInset) {
|
||||
WindowServiceTestSetup setup;
|
||||
|
||||
aura::Window* top_level =
|
||||
@ -89,7 +89,7 @@ TEST(ServerWindow, FindTargetForWindowWithResizeInset) {
|
||||
setup.root(), &mouse_event_2));
|
||||
}
|
||||
|
||||
TEST(ServerWindow, SetClientAreaPropagatesToClientSurfaceEmbedder) {
|
||||
TEST(ProxyWindow, SetClientAreaPropagatesToClientSurfaceEmbedder) {
|
||||
WindowServiceTestSetup setup;
|
||||
|
||||
aura::Window* top_level =
|
@ -1,20 +0,0 @@
|
||||
// Copyright 2018 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "services/ws/server_window_test_helper.h"
|
||||
|
||||
#include "services/ws/server_window.h"
|
||||
|
||||
namespace ws {
|
||||
|
||||
ServerWindowTestHelper::ServerWindowTestHelper(ServerWindow* server_window)
|
||||
: server_window_(server_window) {}
|
||||
|
||||
ServerWindowTestHelper::~ServerWindowTestHelper() = default;
|
||||
|
||||
bool ServerWindowTestHelper::IsHandlingPointerPress(ui::PointerId pointer_id) {
|
||||
return server_window_->IsHandlingPointerPressForTesting(pointer_id);
|
||||
}
|
||||
|
||||
} // namespace ws
|
@ -1,31 +0,0 @@
|
||||
// Copyright 2018 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef SERVICES_WS_SERVER_WINDOW_TEST_HELPER_H_
|
||||
#define SERVICES_WS_SERVER_WINDOW_TEST_HELPER_H_
|
||||
|
||||
#include "base/macros.h"
|
||||
#include "ui/events/event.h"
|
||||
|
||||
namespace ws {
|
||||
|
||||
class ServerWindow;
|
||||
|
||||
// Used for accessing private members of ServerWindow in tests.
|
||||
class ServerWindowTestHelper {
|
||||
public:
|
||||
explicit ServerWindowTestHelper(ServerWindow* server_window);
|
||||
~ServerWindowTestHelper();
|
||||
|
||||
bool IsHandlingPointerPress(ui::PointerId pointer_id);
|
||||
|
||||
private:
|
||||
ServerWindow* server_window_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ServerWindowTestHelper);
|
||||
};
|
||||
|
||||
} // namespace ws
|
||||
|
||||
#endif // SERVICES_WS_SERVER_WINDOW_TEST_HELPER_H_
|
@ -5,7 +5,7 @@
|
||||
#include "services/ws/window_delegate_impl.h"
|
||||
|
||||
#include "services/ws/embedding.h"
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "services/ws/window_properties.h"
|
||||
#include "services/ws/window_tree.h"
|
||||
#include "ui/aura/window.h"
|
||||
@ -32,23 +32,23 @@ gfx::NativeCursor WindowDelegateImpl::GetCursor(const gfx::Point& point) {
|
||||
// Find the cursor of the embed root for an embedded Window, or the toplevel
|
||||
// if it's not an embedded client. This is done to match the behavior of Aura,
|
||||
// which sets the cursor on the root.
|
||||
for (ServerWindow* server_window = ServerWindow::GetMayBeNull(window_);
|
||||
server_window; server_window = ServerWindow::GetMayBeNull(
|
||||
server_window->window()->parent())) {
|
||||
if (server_window->IsTopLevel()) {
|
||||
if (server_window->window() == window_)
|
||||
return server_window->cursor();
|
||||
for (ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window_);
|
||||
proxy_window; proxy_window = ProxyWindow::GetMayBeNull(
|
||||
proxy_window->window()->parent())) {
|
||||
if (proxy_window->IsTopLevel()) {
|
||||
if (proxy_window->window() == window_)
|
||||
return proxy_window->cursor();
|
||||
gfx::Point toplevel_point = point;
|
||||
aura::Window::ConvertPointToTarget(window_, server_window->window(),
|
||||
aura::Window::ConvertPointToTarget(window_, proxy_window->window(),
|
||||
&toplevel_point);
|
||||
return server_window->window()->delegate()->GetCursor(toplevel_point);
|
||||
return proxy_window->window()->delegate()->GetCursor(toplevel_point);
|
||||
}
|
||||
|
||||
// Assume that if the embedder is intercepting events, it's also responsible
|
||||
// for the cursor (which is the case with content embeddings).
|
||||
if (server_window->HasEmbedding() &&
|
||||
!server_window->embedding()->embedding_tree_intercepts_events()) {
|
||||
return server_window->cursor();
|
||||
if (proxy_window->HasEmbedding() &&
|
||||
!proxy_window->embedding()->embedding_tree_intercepts_events()) {
|
||||
return proxy_window->cursor();
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,10 +90,10 @@ void WindowDelegateImpl::OnWindowTargetVisibilityChanged(bool visible) {}
|
||||
void WindowDelegateImpl::OnWindowOcclusionChanged(
|
||||
aura::Window::OcclusionState occlusion_state,
|
||||
const SkRegion&) {
|
||||
ServerWindow* const server_window = ServerWindow::GetMayBeNull(window_);
|
||||
ProxyWindow* const proxy_window = ProxyWindow::GetMayBeNull(window_);
|
||||
// TODO: Send occluded region.
|
||||
if (server_window)
|
||||
server_window->owning_window_tree()->SendOcclusionState(window_);
|
||||
if (proxy_window)
|
||||
proxy_window->owning_window_tree()->SendOcclusionState(window_);
|
||||
}
|
||||
|
||||
bool WindowDelegateImpl::HasHitTestMask() const {
|
||||
|
@ -15,11 +15,11 @@
|
||||
#include "services/ws/event_injector.h"
|
||||
#include "services/ws/event_queue.h"
|
||||
#include "services/ws/host_event_queue.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "services/ws/public/cpp/host/gpu_interface_provider.h"
|
||||
#include "services/ws/public/mojom/window_manager.mojom.h"
|
||||
#include "services/ws/remoting_event_injector.h"
|
||||
#include "services/ws/screen_provider.h"
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/user_activity_monitor.h"
|
||||
#include "services/ws/window_server_test_impl.h"
|
||||
#include "services/ws/window_service_delegate.h"
|
||||
@ -36,9 +36,9 @@ namespace ws {
|
||||
|
||||
namespace {
|
||||
|
||||
// Returns true if |window| has remote client and marked as has-content.
|
||||
bool IsRemoteOpaqueWindow(const aura::Window* window) {
|
||||
return WindowService::HasRemoteClient(window) &&
|
||||
// Returns true if |window| is a proxy window and marked as has-content.
|
||||
bool IsOpaqueProxyWindow(const aura::Window* window) {
|
||||
return WindowService::IsProxyWindow(window) &&
|
||||
window->GetProperty(aura::client::kClientWindowHasContent);
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ WindowService::WindowService(
|
||||
|
||||
// Extends WindowOcclusionTracker to check whether remote window has content.
|
||||
env_->GetWindowOcclusionTracker()->set_window_has_content_callback(
|
||||
base::BindRepeating(&IsRemoteOpaqueWindow));
|
||||
base::BindRepeating(&IsOpaqueProxyWindow));
|
||||
}
|
||||
|
||||
WindowService::~WindowService() {
|
||||
@ -95,17 +95,17 @@ void WindowService::BindServiceRequest(
|
||||
service_binding_.Bind(std::move(request));
|
||||
}
|
||||
|
||||
ServerWindow* WindowService::GetServerWindowForWindowCreateIfNecessary(
|
||||
ProxyWindow* WindowService::GetProxyWindowForWindowCreateIfNecessary(
|
||||
aura::Window* window) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
if (server_window)
|
||||
return server_window;
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (proxy_window)
|
||||
return proxy_window;
|
||||
|
||||
const viz::FrameSinkId frame_sink_id =
|
||||
ClientWindowId(kWindowServerClientId, next_window_id_++);
|
||||
CHECK_NE(0u, next_window_id_);
|
||||
const bool is_top_level = false;
|
||||
return ServerWindow::Create(window, nullptr, frame_sink_id, is_top_level);
|
||||
return ProxyWindow::Create(window, nullptr, frame_sink_id, is_top_level);
|
||||
}
|
||||
|
||||
std::unique_ptr<WindowTree> WindowService::CreateWindowTree(
|
||||
@ -133,14 +133,14 @@ void WindowService::SetDisplayForNewWindows(int64_t display_id) {
|
||||
}
|
||||
|
||||
// static
|
||||
bool WindowService::HasRemoteClient(const aura::Window* window) {
|
||||
return ServerWindow::GetMayBeNull(window);
|
||||
bool WindowService::IsProxyWindow(const aura::Window* window) {
|
||||
return ProxyWindow::GetMayBeNull(window);
|
||||
}
|
||||
|
||||
// static
|
||||
bool WindowService::IsTopLevelWindow(const aura::Window* window) {
|
||||
const ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
return server_window && server_window->IsTopLevel();
|
||||
const ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
return proxy_window && proxy_window->IsTopLevel();
|
||||
}
|
||||
|
||||
aura::Window* WindowService::GetWindowByClientId(Id transport_id) {
|
||||
@ -151,18 +151,18 @@ aura::Window* WindowService::GetWindowByClientId(Id transport_id) {
|
||||
}
|
||||
|
||||
Id WindowService::GetCompleteTransportIdForWindow(aura::Window* window) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
if (!server_window)
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (!proxy_window)
|
||||
return kInvalidTransportId;
|
||||
if (!server_window->owning_window_tree())
|
||||
if (!proxy_window->owning_window_tree())
|
||||
return kInvalidTransportId;
|
||||
// NOTE: WindowTree::TransportIdForWindow() is the id sent to the client,
|
||||
// which has the client_id portion set to 0. This function wants to see the
|
||||
// real client_id, so it has to build it.
|
||||
return BuildTransportId(
|
||||
server_window->owning_window_tree()->client_id(),
|
||||
proxy_window->owning_window_tree()->client_id(),
|
||||
ClientWindowIdFromTransportId(
|
||||
server_window->owning_window_tree()->TransportIdForWindow(window)));
|
||||
proxy_window->owning_window_tree()->TransportIdForWindow(window)));
|
||||
}
|
||||
|
||||
WindowService::TreeAndWindowId
|
||||
@ -188,7 +188,7 @@ bool WindowService::CompleteScheduleEmbedForExistingClient(
|
||||
// Caller must supply a window, and further the window should not be exposed
|
||||
// to a remote client yet.
|
||||
DCHECK(window);
|
||||
DCHECK(!HasRemoteClient(window));
|
||||
DCHECK(!IsProxyWindow(window));
|
||||
|
||||
const TreeAndWindowId tree_and_id =
|
||||
FindTreeWithScheduleEmbedForExistingClient(embed_token);
|
||||
@ -199,14 +199,13 @@ bool WindowService::CompleteScheduleEmbedForExistingClient(
|
||||
DCHECK(!(embed_flags & mojom::kEmbedFlagEmbedderInterceptsEvents));
|
||||
const bool owner_intercept_events = false;
|
||||
|
||||
ServerWindow* server_window =
|
||||
GetServerWindowForWindowCreateIfNecessary(window);
|
||||
ProxyWindow* proxy_window = GetProxyWindowForWindowCreateIfNecessary(window);
|
||||
tree_and_id.tree->CompleteScheduleEmbedForExistingClient(
|
||||
window, tree_and_id.id, embed_token);
|
||||
std::unique_ptr<Embedding> embedding =
|
||||
std::make_unique<Embedding>(nullptr, window, owner_intercept_events);
|
||||
embedding->InitForEmbedInExistingTree(tree_and_id.tree);
|
||||
server_window->SetEmbedding(std::move(embedding));
|
||||
proxy_window->SetEmbedding(std::move(embedding));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -231,11 +230,11 @@ void WindowService::OnWillDestroyWindowTree(WindowTree* tree) {
|
||||
}
|
||||
|
||||
bool WindowService::RequestClose(aura::Window* window) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
if (!server_window || !server_window->IsTopLevel())
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (!proxy_window || !proxy_window->IsTopLevel())
|
||||
return false;
|
||||
|
||||
server_window->owning_window_tree()->RequestClose(server_window);
|
||||
proxy_window->owning_window_tree()->RequestClose(proxy_window);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -245,10 +244,10 @@ void WindowService::OnDisplayMetricsChanged(const display::Display& display,
|
||||
}
|
||||
|
||||
std::string WindowService::GetIdForDebugging(aura::Window* window) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
if (!server_window)
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (!proxy_window)
|
||||
return std::string();
|
||||
return server_window->GetIdForDebugging();
|
||||
return proxy_window->GetIdForDebugging();
|
||||
}
|
||||
|
||||
std::unique_ptr<HostEventQueue> WindowService::RegisterHostEventDispatcher(
|
||||
|
@ -65,7 +65,7 @@ class HostEventDispatcher;
|
||||
class HostEventQueue;
|
||||
class RemotingEventInjector;
|
||||
class ScreenProvider;
|
||||
class ServerWindow;
|
||||
class ProxyWindow;
|
||||
class UserActivityMonitor;
|
||||
class WindowServiceDelegate;
|
||||
class WindowServiceObserver;
|
||||
@ -93,8 +93,8 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) WindowService
|
||||
// Manger.
|
||||
void BindServiceRequest(service_manager::mojom::ServiceRequest request);
|
||||
|
||||
// Gets the ServerWindow for |window|, creating if necessary.
|
||||
ServerWindow* GetServerWindowForWindowCreateIfNecessary(aura::Window* window);
|
||||
// Gets the ProxyWindow for |window|, creating if necessary.
|
||||
ProxyWindow* GetProxyWindowForWindowCreateIfNecessary(aura::Window* window);
|
||||
|
||||
// Creates a new WindowTree, caller must call one of the Init() functions on
|
||||
// the returned object.
|
||||
@ -110,8 +110,8 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) WindowService
|
||||
// over mojo to all remote clients.
|
||||
void SetDisplayForNewWindows(int64_t display_id);
|
||||
|
||||
// Whether |window| hosts a remote client.
|
||||
static bool HasRemoteClient(const aura::Window* window);
|
||||
// Returns true if |window| is a proxy window.
|
||||
static bool IsProxyWindow(const aura::Window* window);
|
||||
|
||||
// Returns true if |window| hosts a remote client and is a toplevel window.
|
||||
static bool IsTopLevelWindow(const aura::Window* window);
|
||||
@ -179,7 +179,7 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) WindowService
|
||||
aura::WindowTreeHost* window_tree_host,
|
||||
HostEventDispatcher* dispatcher);
|
||||
|
||||
// Returns an id useful for debugging. See ServerWindow::GetIdForDebugging()
|
||||
// Returns an id useful for debugging. See ProxyWindow::GetIdForDebugging()
|
||||
// for details.
|
||||
std::string GetIdForDebugging(aura::Window* window);
|
||||
|
||||
|
@ -200,7 +200,7 @@ TEST(WindowServiceTest, ScheduleEmbedForExistingClientUsingLocalWindow) {
|
||||
local_window->Init(ui::LAYER_NOT_DRAWN);
|
||||
ASSERT_TRUE(setup.service()->CompleteScheduleEmbedForExistingClient(
|
||||
local_window.get(), token, /* embed_flags */ 0));
|
||||
EXPECT_TRUE(WindowService::HasRemoteClient(local_window.get()));
|
||||
EXPECT_TRUE(WindowService::IsProxyWindow(local_window.get()));
|
||||
}
|
||||
|
||||
TEST(WindowServiceTest,
|
||||
@ -227,11 +227,11 @@ TEST(WindowServiceTest,
|
||||
local_window->Init(ui::LAYER_NOT_DRAWN);
|
||||
ASSERT_TRUE(setup.service()->CompleteScheduleEmbedForExistingClient(
|
||||
local_window.get(), token, /* embed_flags */ 0));
|
||||
EXPECT_TRUE(WindowService::HasRemoteClient(local_window.get()));
|
||||
EXPECT_TRUE(WindowService::IsProxyWindow(local_window.get()));
|
||||
|
||||
// Deleting |window_tree2| should remove the remote client.
|
||||
// Deleting |window_tree2| should make |local_window| no longer a proxy.
|
||||
window_tree2.reset();
|
||||
EXPECT_FALSE(WindowService::HasRemoteClient(local_window.get()));
|
||||
EXPECT_FALSE(WindowService::IsProxyWindow(local_window.get()));
|
||||
}
|
||||
|
||||
} // namespace ws
|
||||
|
@ -21,8 +21,8 @@
|
||||
#include "services/ws/drag_drop_delegate.h"
|
||||
#include "services/ws/embedding.h"
|
||||
#include "services/ws/event_observer_helper.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "services/ws/public/cpp/property_type_converters.h"
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/topmost_window_observer.h"
|
||||
#include "services/ws/window_delegate_impl.h"
|
||||
#include "services/ws/window_manager_interface.h"
|
||||
@ -128,10 +128,10 @@ WindowTree::~WindowTree() {
|
||||
|
||||
void WindowTree::InitForEmbed(aura::Window* root,
|
||||
mojom::WindowTreePtr window_tree_ptr) {
|
||||
// Force ServerWindow to be created for |root|.
|
||||
ServerWindow* server_window =
|
||||
window_service_->GetServerWindowForWindowCreateIfNecessary(root);
|
||||
const ClientWindowId client_window_id = server_window->frame_sink_id();
|
||||
// Force ProxyWindow to be created for |root|.
|
||||
ProxyWindow* proxy_window =
|
||||
window_service_->GetProxyWindowForWindowCreateIfNecessary(root);
|
||||
const ClientWindowId client_window_id = proxy_window->frame_sink_id();
|
||||
AddWindowToKnownWindows(root, client_window_id, nullptr);
|
||||
const bool is_top_level = false;
|
||||
ClientRoot* client_root = CreateClientRoot(root, is_top_level);
|
||||
@ -144,11 +144,11 @@ void WindowTree::InitForEmbed(aura::Window* root,
|
||||
window_tree_client_->OnEmbed(WindowToWindowData(root),
|
||||
std::move(window_tree_ptr), display_id,
|
||||
ClientWindowIdToTransportId(focused_window_id),
|
||||
drawn, server_window->local_surface_id());
|
||||
drawn, proxy_window->local_surface_id());
|
||||
|
||||
// Reset the frame sink id locally (after calling OnEmbed()). This is
|
||||
// needed so that the id used by the client matches the id used locally.
|
||||
server_window->set_frame_sink_id(ClientWindowId(client_id_, 0));
|
||||
proxy_window->set_frame_sink_id(ClientWindowId(client_id_, 0));
|
||||
|
||||
client_root->RegisterVizEmbeddingSupport();
|
||||
}
|
||||
@ -160,7 +160,7 @@ void WindowTree::InitFromFactory() {
|
||||
void WindowTree::SendEventToClient(aura::Window* window,
|
||||
const ui::Event& event) {
|
||||
// As gesture recognition runs in the client, GestureEvents should not be
|
||||
// forwarded. ServerWindow's event processing should ensure no GestureEvents
|
||||
// forwarded. ProxyWindow's event processing should ensure no GestureEvents
|
||||
// are sent.
|
||||
DCHECK(!event.IsGestureEvent());
|
||||
|
||||
@ -211,7 +211,7 @@ void WindowTree::SendEventToClient(aura::Window* window,
|
||||
}
|
||||
}
|
||||
DVLOG(4) << "SendEventToClient window="
|
||||
<< ServerWindow::GetMayBeNull(window)->GetIdForDebugging()
|
||||
<< ProxyWindow::GetMayBeNull(window)->GetIdForDebugging()
|
||||
<< " event_type=" << ui::EventTypeName(event.type())
|
||||
<< " event_id=" << event_id;
|
||||
window_tree_client_->OnWindowInputEvent(
|
||||
@ -250,7 +250,7 @@ aura::Window* WindowTree::GetWindowByTransportId(Id transport_window_id) {
|
||||
return GetWindowByClientId(MakeClientWindowId(transport_window_id));
|
||||
}
|
||||
|
||||
void WindowTree::RequestClose(ServerWindow* window) {
|
||||
void WindowTree::RequestClose(ProxyWindow* window) {
|
||||
DCHECK(window->IsTopLevel());
|
||||
DCHECK_EQ(this, window->owning_window_tree());
|
||||
window_tree_client_->RequestClose(TransportIdForWindow(window->window()));
|
||||
@ -288,26 +288,26 @@ void WindowTree::CompleteScheduleEmbedForExistingClient(
|
||||
const bool is_top_level = false;
|
||||
ClientRoot* client_root = CreateClientRoot(window, is_top_level);
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
// It's expected we only get here if a ServerWindow exists for |window|.
|
||||
DCHECK(server_window);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
// It's expected we only get here if a ProxyWindow exists for |window|.
|
||||
DCHECK(proxy_window);
|
||||
|
||||
const int64_t display_id =
|
||||
display::Screen::GetScreen()->GetDisplayNearestWindow(window).id();
|
||||
window_tree_client_->OnEmbedFromToken(token, WindowToWindowData(window),
|
||||
display_id,
|
||||
server_window->local_surface_id());
|
||||
proxy_window->local_surface_id());
|
||||
|
||||
// Reset the frame sink id locally (after calling OnEmbedFromToken()). This is
|
||||
// needed so that the id used by the client matches the id used locally.
|
||||
server_window->set_frame_sink_id(id);
|
||||
proxy_window->set_frame_sink_id(id);
|
||||
|
||||
client_root->RegisterVizEmbeddingSupport();
|
||||
}
|
||||
|
||||
bool WindowTree::HasAtLeastOneRootWithCompositorFrameSink() {
|
||||
for (auto& client_root : client_roots_) {
|
||||
if (ServerWindow::GetMayBeNull(client_root->window())
|
||||
if (ProxyWindow::GetMayBeNull(client_root->window())
|
||||
->attached_compositor_frame_sink()) {
|
||||
return true;
|
||||
}
|
||||
@ -340,11 +340,11 @@ ClientRoot* WindowTree::CreateClientRoot(aura::Window* window,
|
||||
DCHECK(window);
|
||||
|
||||
// Only one client may be embedded in a window at a time.
|
||||
ServerWindow* server_window =
|
||||
window_service_->GetServerWindowForWindowCreateIfNecessary(window);
|
||||
if (server_window->embedded_window_tree()) {
|
||||
server_window->embedded_window_tree()->DeleteClientRootWithRoot(window);
|
||||
DCHECK(!server_window->embedded_window_tree());
|
||||
ProxyWindow* proxy_window =
|
||||
window_service_->GetProxyWindowForWindowCreateIfNecessary(window);
|
||||
if (proxy_window->embedded_window_tree()) {
|
||||
proxy_window->embedded_window_tree()->DeleteClientRootWithRoot(window);
|
||||
DCHECK(!proxy_window->embedded_window_tree());
|
||||
}
|
||||
|
||||
// Because a new client is being embedded all existing children are removed.
|
||||
@ -362,12 +362,12 @@ void WindowTree::DeleteClientRoot(ClientRoot* client_root,
|
||||
DeleteClientRootReason reason) {
|
||||
aura::Window* window = client_root->window();
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
client_root->UnattachChildFrameSinkIdRecursive(server_window);
|
||||
if (server_window->capture_owner() == this) {
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
client_root->UnattachChildFrameSinkIdRecursive(proxy_window);
|
||||
if (proxy_window->capture_owner() == this) {
|
||||
// This client will no longer know about |window|, so it should not receive
|
||||
// any events sent to the client.
|
||||
server_window->SetCaptureOwner(nullptr);
|
||||
proxy_window->SetCaptureOwner(nullptr);
|
||||
}
|
||||
|
||||
// Delete the ClientRoot first, so that we don't attempt to spam the
|
||||
@ -407,25 +407,24 @@ void WindowTree::DeleteClientRoot(ClientRoot* client_root,
|
||||
if (reason == DeleteClientRootReason::kUnembed ||
|
||||
reason == DeleteClientRootReason::kDestructor) {
|
||||
// Notify the owner of the window it no longer has a client embedded in it.
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
if (server_window->owning_window_tree() &&
|
||||
server_window->owning_window_tree() != this) {
|
||||
// ClientRoots always trigger creation of a ServerWindow, so
|
||||
// |server_window| must exist at this point.
|
||||
DCHECK(server_window);
|
||||
server_window->owning_window_tree()
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (proxy_window->owning_window_tree() &&
|
||||
proxy_window->owning_window_tree() != this) {
|
||||
// ClientRoots always trigger creation of a ProxyWindow, so
|
||||
// |proxy_window| must exist at this point.
|
||||
DCHECK(proxy_window);
|
||||
proxy_window->owning_window_tree()
|
||||
->window_tree_client_->OnEmbeddedAppDisconnected(
|
||||
server_window->owning_window_tree()->TransportIdForWindow(
|
||||
window));
|
||||
proxy_window->owning_window_tree()->TransportIdForWindow(window));
|
||||
}
|
||||
if (server_window->embedding())
|
||||
server_window->embedding()->clear_embedded_tree();
|
||||
if (proxy_window->embedding())
|
||||
proxy_window->embedding()->clear_embedded_tree();
|
||||
// Only reset the embedding if it's for an existing tree. To do otherwise
|
||||
// results in trying to delete this.
|
||||
if (server_window->embedding() && !server_window->embedding()->binding()) {
|
||||
server_window->SetEmbedding(nullptr);
|
||||
if (!server_window->owning_window_tree())
|
||||
server_window->Destroy();
|
||||
if (proxy_window->embedding() && !proxy_window->embedding()->binding()) {
|
||||
proxy_window->SetEmbedding(nullptr);
|
||||
if (!proxy_window->owning_window_tree())
|
||||
proxy_window->Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -474,17 +473,17 @@ WindowTree::ClientRoots::iterator WindowTree::FindClientRootWithRoot(
|
||||
}
|
||||
|
||||
bool WindowTree::IsWindowRootOfAnotherClient(aura::Window* window) const {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
return server_window && server_window->embedded_window_tree() != nullptr &&
|
||||
server_window->embedded_window_tree() != this;
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
return proxy_window && proxy_window->embedded_window_tree() != nullptr &&
|
||||
proxy_window->embedded_window_tree() != this;
|
||||
}
|
||||
|
||||
bool WindowTree::DoesAnyAncestorInterceptEvents(ServerWindow* window) {
|
||||
bool WindowTree::DoesAnyAncestorInterceptEvents(ProxyWindow* window) {
|
||||
if (window->embedding() && window->embedding()->embedding_tree() != this &&
|
||||
window->embedding()->embedding_tree_intercepts_events()) {
|
||||
return true;
|
||||
}
|
||||
ServerWindow* parent = ServerWindow::GetMayBeNull(window->window()->parent());
|
||||
ProxyWindow* parent = ProxyWindow::GetMayBeNull(window->window()->parent());
|
||||
return parent && DoesAnyAncestorInterceptEvents(parent);
|
||||
}
|
||||
|
||||
@ -559,7 +558,7 @@ aura::Window* WindowTree::AddClientCreatedWindow(
|
||||
bool is_top_level,
|
||||
std::unique_ptr<aura::Window> window_ptr) {
|
||||
aura::Window* window = window_ptr.get();
|
||||
ServerWindow::Create(window, this, id, is_top_level);
|
||||
ProxyWindow::Create(window, this, id, is_top_level);
|
||||
AddWindowToKnownWindows(window, id, std::move(window_ptr));
|
||||
return window;
|
||||
}
|
||||
@ -584,12 +583,12 @@ void WindowTree::RemoveWindowFromKnownWindows(aura::Window* window,
|
||||
bool delete_if_owned) {
|
||||
DCHECK(IsWindowKnown(window));
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
ClientRoot* client_root = FindClientRootContaining(window);
|
||||
if (client_root)
|
||||
client_root->UnattachChildFrameSinkIdRecursive(server_window);
|
||||
client_root->UnattachChildFrameSinkIdRecursive(proxy_window);
|
||||
|
||||
server_window->set_attached_frame_sink_id(viz::FrameSinkId());
|
||||
proxy_window->set_attached_frame_sink_id(viz::FrameSinkId());
|
||||
|
||||
auto iter = known_windows_map_.find(window);
|
||||
DCHECK(iter != known_windows_map_.end());
|
||||
@ -606,7 +605,7 @@ void WindowTree::RemoveWindowFromKnownWindows(aura::Window* window,
|
||||
DCHECK(iter == known_windows_map_.find(window));
|
||||
|
||||
// Remove from these maps after destruction. This is necessary as destruction
|
||||
// may end up expecting to find a ServerWindow.
|
||||
// may end up expecting to find a ProxyWindow.
|
||||
DCHECK(iter != known_windows_map_.end());
|
||||
client_window_id_to_window_map_.erase(iter->second.client_window_id);
|
||||
known_windows_map_.erase(iter);
|
||||
@ -707,9 +706,8 @@ WindowTree::GetAndRemoveScheduledEmbedWindowTreeClient(
|
||||
|
||||
visited_trees->insert(this);
|
||||
for (auto& client_root : client_roots_) {
|
||||
ServerWindow* root_window =
|
||||
ServerWindow::GetMayBeNull(client_root->window());
|
||||
DCHECK(root_window); // There should always be a ServerWindow for a root.
|
||||
ProxyWindow* root_window = ProxyWindow::GetMayBeNull(client_root->window());
|
||||
DCHECK(root_window); // There should always be a ProxyWindow for a root.
|
||||
WindowTree* owning_tree = root_window->owning_window_tree();
|
||||
if (owning_tree) {
|
||||
auto result = owning_tree->GetAndRemoveScheduledEmbedWindowTreeClient(
|
||||
@ -814,9 +812,9 @@ bool WindowTree::SetCaptureImpl(const ClientWindowId& window_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
|
||||
if (DoesAnyAncestorInterceptEvents(server_window)) {
|
||||
if (DoesAnyAncestorInterceptEvents(proxy_window)) {
|
||||
// If an ancestor is intercepting events, than the descendants are not
|
||||
// allowed to set capture. This is primarily to prevent renderers from
|
||||
// setting capture.
|
||||
@ -828,20 +826,20 @@ bool WindowTree::SetCaptureImpl(const ClientWindowId& window_id) {
|
||||
DCHECK(capture_controller);
|
||||
|
||||
if (capture_controller->GetCaptureWindow() == window) {
|
||||
if (server_window->capture_owner() != this) {
|
||||
if (proxy_window->capture_owner() != this) {
|
||||
// The capture window didn't change, but the client that owns capture
|
||||
// changed (see |ServerWindow::capture_owner_| for details on this).
|
||||
// changed (see |ProxyWindow::capture_owner_| for details on this).
|
||||
// Notify the current owner that it lost capture.
|
||||
if (server_window->capture_owner())
|
||||
server_window->capture_owner()->OnCaptureLost(window);
|
||||
server_window->SetCaptureOwner(this);
|
||||
if (proxy_window->capture_owner())
|
||||
proxy_window->capture_owner()->OnCaptureLost(window);
|
||||
proxy_window->SetCaptureOwner(this);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
ClientChange change(property_change_tracker_.get(), window,
|
||||
ClientChangeType::kCapture);
|
||||
server_window->SetCaptureOwner(this);
|
||||
proxy_window->SetCaptureOwner(this);
|
||||
capture_controller->SetCapture(window);
|
||||
return capture_controller->GetCaptureWindow() == window;
|
||||
}
|
||||
@ -870,14 +868,13 @@ bool WindowTree::ReleaseCaptureImpl(const ClientWindowId& window_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
if (server_window->capture_owner() &&
|
||||
server_window->capture_owner() != this) {
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
if (proxy_window->capture_owner() && proxy_window->capture_owner() != this) {
|
||||
// This client is trying to release capture, but it doesn't own capture.
|
||||
DVLOG(1) << "ReleaseCapture failed (client did not request capture)";
|
||||
return false;
|
||||
}
|
||||
server_window->SetCaptureOwner(nullptr);
|
||||
proxy_window->SetCaptureOwner(nullptr);
|
||||
|
||||
ClientChange change(property_change_tracker_.get(), window,
|
||||
ClientChangeType::kCapture);
|
||||
@ -1126,10 +1123,10 @@ bool WindowTree::EmbedImpl(const ClientWindowId& window_id,
|
||||
base::Unretained(this), embedding.get()));
|
||||
if (flags & mojom::kEmbedFlagEmbedderControlsVisibility)
|
||||
embedding->embedded_tree()->can_change_root_window_visibility_ = false;
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
server_window->SetEmbedding(std::move(embedding));
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
proxy_window->SetEmbedding(std::move(embedding));
|
||||
window_tree_client_->OnFrameSinkIdAllocated(
|
||||
ClientWindowIdToTransportId(window_id), server_window->frame_sink_id());
|
||||
ClientWindowIdToTransportId(window_id), proxy_window->frame_sink_id());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1170,11 +1167,11 @@ bool WindowTree::SetWindowBoundsImpl(
|
||||
return false;
|
||||
}
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
const gfx::Rect original_bounds =
|
||||
IsTopLevel(window) ? window->GetBoundsInScreen() : window->bounds();
|
||||
const bool local_surface_id_changed =
|
||||
server_window->local_surface_id() != local_surface_id;
|
||||
proxy_window->local_surface_id() != local_surface_id;
|
||||
|
||||
if (original_bounds == bounds && !local_surface_id_changed)
|
||||
return true;
|
||||
@ -1183,7 +1180,7 @@ bool WindowTree::SetWindowBoundsImpl(
|
||||
ClientChangeType::kBounds);
|
||||
|
||||
if (IsLocalSurfaceIdAssignedByClient(window))
|
||||
server_window->set_local_surface_id(local_surface_id);
|
||||
proxy_window->set_local_surface_id(local_surface_id);
|
||||
|
||||
if (IsTopLevel(window)) {
|
||||
display::Display dst_display =
|
||||
@ -1208,9 +1205,9 @@ bool WindowTree::SetWindowBoundsImpl(
|
||||
if (local_surface_id_changed) {
|
||||
// If the bounds didn't change, but the LocalSurfaceId did, then the
|
||||
// LocalSurfaceId needs to be propagated to any embeddings.
|
||||
if (server_window->HasEmbedding() &&
|
||||
server_window->embedding()->embedding_tree() == this) {
|
||||
WindowTree* embedded_tree = server_window->embedding()->embedded_tree();
|
||||
if (proxy_window->HasEmbedding() &&
|
||||
proxy_window->embedding()->embedding_tree() == this) {
|
||||
WindowTree* embedded_tree = proxy_window->embedding()->embedded_tree();
|
||||
ClientRoot* embedded_client_root =
|
||||
embedded_tree->GetClientRootForWindow(window);
|
||||
DCHECK(embedded_client_root);
|
||||
@ -1221,7 +1218,7 @@ bool WindowTree::SetWindowBoundsImpl(
|
||||
}
|
||||
|
||||
if (window->bounds() == bounds &&
|
||||
server_window->local_surface_id() == local_surface_id) {
|
||||
proxy_window->local_surface_id() == local_surface_id) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1283,7 +1280,7 @@ bool WindowTree::SetCursorImpl(const ClientWindowId& window_id,
|
||||
return false;
|
||||
}
|
||||
|
||||
auto* server_window = ServerWindow::GetMayBeNull(window);
|
||||
auto* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
|
||||
ui::Cursor old_cursor_type = cursor.ToNativeCursor();
|
||||
|
||||
@ -1292,9 +1289,9 @@ bool WindowTree::SetCursorImpl(const ClientWindowId& window_id,
|
||||
// last to have set the cursor/is currently hovered).
|
||||
if (!window_service_->delegate()->StoreAndSetCursor(window,
|
||||
old_cursor_type)) {
|
||||
// Store the cursor on ServerWindow. This will later be accessed by the
|
||||
// Store the cursor on ProxyWindow. This will later be accessed by the
|
||||
// WindowDelegate for non-toplevels, i.e. WindowDelegateImpl.
|
||||
server_window->StoreCursor(old_cursor_type);
|
||||
proxy_window->StoreCursor(old_cursor_type);
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -1343,7 +1340,7 @@ void WindowTree::GetWindowTreeRecursive(aura::Window* window,
|
||||
}
|
||||
|
||||
void WindowTree::OnEmbeddedClientConnectionLost(Embedding* embedding) {
|
||||
ServerWindow::GetMayBeNull(embedding->window())->SetEmbedding(nullptr);
|
||||
ProxyWindow::GetMayBeNull(embedding->window())->SetEmbedding(nullptr);
|
||||
}
|
||||
|
||||
void WindowTree::OnWindowHierarchyChanging(
|
||||
@ -1351,17 +1348,17 @@ void WindowTree::OnWindowHierarchyChanging(
|
||||
if (params.target != params.receiver || !IsClientCreatedWindow(params.target))
|
||||
return;
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(params.target);
|
||||
DCHECK(server_window); // non-null because of IsClientCreatedWindow() check.
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(params.target);
|
||||
DCHECK(proxy_window); // non-null because of IsClientCreatedWindow() check.
|
||||
ClientRoot* old_root = FindClientRootContaining(params.old_parent);
|
||||
ClientRoot* new_root = FindClientRootContaining(params.new_parent);
|
||||
if (old_root == new_root)
|
||||
return;
|
||||
|
||||
if (old_root)
|
||||
old_root->UnattachChildFrameSinkIdRecursive(server_window);
|
||||
old_root->UnattachChildFrameSinkIdRecursive(proxy_window);
|
||||
if (new_root)
|
||||
new_root->AttachChildFrameSinkIdRecursive(server_window);
|
||||
new_root->AttachChildFrameSinkIdRecursive(proxy_window);
|
||||
}
|
||||
|
||||
void WindowTree::OnWindowDestroyed(aura::Window* window) {
|
||||
@ -1410,12 +1407,12 @@ void WindowTree::OnCaptureChanged(aura::Window* lost_capture,
|
||||
// another window.
|
||||
if (lost_capture && (IsClientCreatedWindow(lost_capture) ||
|
||||
IsClientRootWindow(lost_capture))) {
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(lost_capture);
|
||||
if (server_window->capture_owner() == this) {
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(lost_capture);
|
||||
if (proxy_window->capture_owner() == this) {
|
||||
// One of the windows known to this client had capture. Notify the client
|
||||
// of the change. If the client does not know about the window that gained
|
||||
// capture, an invalid window id is used.
|
||||
server_window->SetCaptureOwner(nullptr);
|
||||
proxy_window->SetCaptureOwner(nullptr);
|
||||
const Id gained_capture_id = gained_capture &&
|
||||
IsWindowKnown(gained_capture) &&
|
||||
!IsClientRootWindow(gained_capture)
|
||||
@ -1472,8 +1469,8 @@ void WindowTree::NewTopLevelWindow(
|
||||
const bool is_top_level = true;
|
||||
aura::Window* top_level = AddClientCreatedWindow(
|
||||
client_window_id, is_top_level, std::move(top_level_ptr));
|
||||
ServerWindow* top_level_server_window = ServerWindow::GetMayBeNull(top_level);
|
||||
top_level_server_window->set_frame_sink_id(client_window_id);
|
||||
ProxyWindow* top_level_proxy_window = ProxyWindow::GetMayBeNull(top_level);
|
||||
top_level_proxy_window->set_frame_sink_id(client_window_id);
|
||||
const int64_t display_id =
|
||||
display::Screen::GetScreen()->GetDisplayNearestWindow(top_level).id();
|
||||
// This passes null for the mojom::WindowTreePtr because the client has
|
||||
@ -1482,7 +1479,7 @@ void WindowTree::NewTopLevelWindow(
|
||||
CreateClientRoot(top_level, is_top_level)->RegisterVizEmbeddingSupport();
|
||||
window_tree_client_->OnTopLevelCreated(
|
||||
change_id, WindowToWindowData(top_level), display_id,
|
||||
top_level->IsVisible(), top_level_server_window->local_surface_id());
|
||||
top_level->IsVisible(), top_level_proxy_window->local_surface_id());
|
||||
}
|
||||
|
||||
void WindowTree::DeleteWindow(uint32_t change_id, Id transport_window_id) {
|
||||
@ -1550,9 +1547,9 @@ void WindowTree::SetClientArea(
|
||||
return;
|
||||
}
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
DCHECK(server_window); // Must exist because of preceding conditionals.
|
||||
server_window->SetClientArea(
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
DCHECK(proxy_window); // Must exist because of preceding conditionals.
|
||||
proxy_window->SetClientArea(
|
||||
insets, additional_client_areas.value_or(std::vector<gfx::Rect>()));
|
||||
}
|
||||
|
||||
@ -1572,10 +1569,10 @@ void WindowTree::SetHitTestInsets(Id transport_window_id,
|
||||
return;
|
||||
}
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
DCHECK(server_window); // Must exist because of preceding conditionals.
|
||||
server_window->SetHitTestInsets(MakeInsetsPositive(mouse),
|
||||
MakeInsetsPositive(touch));
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
DCHECK(proxy_window); // Must exist because of preceding conditionals.
|
||||
proxy_window->SetHitTestInsets(MakeInsetsPositive(mouse),
|
||||
MakeInsetsPositive(touch));
|
||||
}
|
||||
|
||||
void WindowTree::AttachFrameSinkId(Id transport_window_id,
|
||||
@ -1590,18 +1587,18 @@ void WindowTree::AttachFrameSinkId(Id transport_window_id,
|
||||
DVLOG(3) << "AttachFrameSinkId failed (invalid window id)";
|
||||
return;
|
||||
}
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
DCHECK(server_window); // Must exist because of preceding conditionals.
|
||||
if (server_window->attached_frame_sink_id() == f)
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
DCHECK(proxy_window); // Must exist because of preceding conditionals.
|
||||
if (proxy_window->attached_frame_sink_id() == f)
|
||||
return;
|
||||
if (f.is_valid() && server_window->attached_frame_sink_id().is_valid()) {
|
||||
if (f.is_valid() && proxy_window->attached_frame_sink_id().is_valid()) {
|
||||
DVLOG(3) << "AttachFrameSinkId failed (window already has frame sink)";
|
||||
return;
|
||||
}
|
||||
server_window->set_attached_frame_sink_id(f);
|
||||
proxy_window->set_attached_frame_sink_id(f);
|
||||
ClientRoot* client_root = FindClientRootContaining(window);
|
||||
if (client_root)
|
||||
client_root->AttachChildFrameSinkId(server_window);
|
||||
client_root->AttachChildFrameSinkId(proxy_window);
|
||||
}
|
||||
|
||||
void WindowTree::UnattachFrameSinkId(Id transport_window_id) {
|
||||
@ -1611,17 +1608,17 @@ void WindowTree::UnattachFrameSinkId(Id transport_window_id) {
|
||||
DVLOG(3) << "UnattachFrameSinkId failed (invalid window id)";
|
||||
return;
|
||||
}
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
DCHECK(server_window); // Must exist because of preceding conditionals.
|
||||
if (!server_window->attached_frame_sink_id().is_valid()) {
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
DCHECK(proxy_window); // Must exist because of preceding conditionals.
|
||||
if (!proxy_window->attached_frame_sink_id().is_valid()) {
|
||||
DVLOG(3) << "UnattachFrameSinkId failed (frame sink already cleared)";
|
||||
return;
|
||||
}
|
||||
|
||||
ClientRoot* client_root = FindClientRootContaining(window);
|
||||
if (client_root)
|
||||
client_root->UnattachChildFrameSinkId(server_window);
|
||||
server_window->set_attached_frame_sink_id(viz::FrameSinkId());
|
||||
client_root->UnattachChildFrameSinkId(proxy_window);
|
||||
proxy_window->set_attached_frame_sink_id(viz::FrameSinkId());
|
||||
}
|
||||
|
||||
void WindowTree::SetCanAcceptDrops(Id window_id, bool accepts_drops) {
|
||||
@ -1635,16 +1632,16 @@ void WindowTree::SetCanAcceptDrops(Id window_id, bool accepts_drops) {
|
||||
return;
|
||||
}
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
DCHECK(server_window); // Must exist because of preceding conditionals.
|
||||
if (accepts_drops && !server_window->HasDragDropDelegate()) {
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
DCHECK(proxy_window); // Must exist because of preceding conditionals.
|
||||
if (accepts_drops && !proxy_window->HasDragDropDelegate()) {
|
||||
auto drag_drop_delegate = std::make_unique<DragDropDelegate>(
|
||||
window_tree_client_, window, window_id);
|
||||
aura::client::SetDragDropDelegate(window, drag_drop_delegate.get());
|
||||
server_window->SetDragDropDelegate(std::move(drag_drop_delegate));
|
||||
} else if (!accepts_drops && server_window->HasDragDropDelegate()) {
|
||||
proxy_window->SetDragDropDelegate(std::move(drag_drop_delegate));
|
||||
} else if (!accepts_drops && proxy_window->HasDragDropDelegate()) {
|
||||
aura::client::SetDragDropDelegate(window, nullptr);
|
||||
server_window->SetDragDropDelegate(nullptr);
|
||||
proxy_window->SetDragDropDelegate(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1685,19 +1682,19 @@ void WindowTree::AttachCompositorFrameSink(
|
||||
DVLOG(1) << "AttachCompositorFrameSink failed (invalid window id)";
|
||||
return;
|
||||
}
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
// If this isn't called on the root, then only allow it if there is not
|
||||
// another client embedded in the window.
|
||||
const bool allow = IsClientRootWindow(window) ||
|
||||
(IsClientCreatedWindow(window) &&
|
||||
server_window->embedded_window_tree() == nullptr);
|
||||
proxy_window->embedded_window_tree() == nullptr);
|
||||
if (!allow) {
|
||||
DVLOG(1) << "AttachCompositorFrameSink failed (policy disallowed)";
|
||||
return;
|
||||
}
|
||||
|
||||
server_window->AttachCompositorFrameSink(std::move(compositor_frame_sink),
|
||||
std::move(client));
|
||||
proxy_window->AttachCompositorFrameSink(std::move(compositor_frame_sink),
|
||||
std::move(client));
|
||||
}
|
||||
|
||||
void WindowTree::AddWindow(uint32_t change_id, Id parent_id, Id child_id) {
|
||||
@ -1824,7 +1821,7 @@ void WindowTree::EmbedUsingToken(Id transport_window_id,
|
||||
return;
|
||||
}
|
||||
|
||||
ServerWindow* server_window = ServerWindow::GetMayBeNull(window);
|
||||
ProxyWindow* proxy_window = ProxyWindow::GetMayBeNull(window);
|
||||
const bool owner_intercept_events =
|
||||
(connection_type_ != ConnectionType::kEmbedding &&
|
||||
(embed_flags & mojom::kEmbedFlagEmbedderInterceptsEvents) != 0);
|
||||
@ -1833,12 +1830,12 @@ void WindowTree::EmbedUsingToken(Id transport_window_id,
|
||||
std::unique_ptr<Embedding> embedding =
|
||||
std::make_unique<Embedding>(this, window, owner_intercept_events);
|
||||
embedding->InitForEmbedInExistingTree(tree_and_id.tree);
|
||||
server_window->SetEmbedding(std::move(embedding));
|
||||
proxy_window->SetEmbedding(std::move(embedding));
|
||||
// Convert |transport_window_id| to ensure the client is supplied a consistent
|
||||
// client-id.
|
||||
window_tree_client_->OnFrameSinkIdAllocated(
|
||||
ClientWindowIdToTransportId(MakeClientWindowId(transport_window_id)),
|
||||
server_window->frame_sink_id());
|
||||
proxy_window->frame_sink_id());
|
||||
std::move(callback).Run(true);
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ class ClientRoot;
|
||||
class Embedding;
|
||||
class EventObserverHelper;
|
||||
class FocusHandler;
|
||||
class ServerWindow;
|
||||
class ProxyWindow;
|
||||
class TopmostWindowObserver;
|
||||
class WindowManagerInterface;
|
||||
class WindowService;
|
||||
@ -107,7 +107,7 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) WindowTree
|
||||
bool IsTopLevel(aura::Window* window);
|
||||
|
||||
// Asks the client to close |window|. |window| must be a top-level window.
|
||||
void RequestClose(ServerWindow* window);
|
||||
void RequestClose(ProxyWindow* window);
|
||||
|
||||
// Called when an Embedding is destroyed. This is only called for Embeddings
|
||||
// that do not own the WindowTree (see Embedding for more details on when this
|
||||
@ -220,7 +220,7 @@ class COMPONENT_EXPORT(WINDOW_SERVICE) WindowTree
|
||||
bool IsWindowRootOfAnotherClient(aura::Window* window) const;
|
||||
|
||||
// Returns true if |window| has an ancestor that intercepts events.
|
||||
bool DoesAnyAncestorInterceptEvents(ServerWindow* window);
|
||||
bool DoesAnyAncestorInterceptEvents(ProxyWindow* window);
|
||||
|
||||
// Called when one of the windows known to the client loses capture.
|
||||
// |lost_capture| is the window that had capture.
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include "services/ws/window_tree_test_helper.h"
|
||||
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "services/ws/window_tree_binding.h"
|
||||
|
||||
namespace ws {
|
||||
@ -123,7 +123,7 @@ Embedding* WindowTreeTestHelper::Embed(aura::Window* window,
|
||||
std::move(client_ptr), client, embed_flags)) {
|
||||
return nullptr;
|
||||
}
|
||||
return ServerWindow::GetMayBeNull(window)->embedding();
|
||||
return ProxyWindow::GetMayBeNull(window)->embedding();
|
||||
}
|
||||
|
||||
void WindowTreeTestHelper::SetEventTargetingPolicy(
|
||||
|
@ -90,7 +90,7 @@ class WindowTreeTestHelper {
|
||||
uint32_t change_id = 1);
|
||||
|
||||
// Creates a new embedding. On success the new Embedding is returned. The
|
||||
// returned Embedding is owned by the ServerWindow for |window|.
|
||||
// returned Embedding is owned by the ProxyWindow for |window|.
|
||||
Embedding* Embed(aura::Window* window,
|
||||
mojom::WindowTreeClientPtr client_ptr,
|
||||
mojom::WindowTreeClient* client,
|
||||
|
@ -15,10 +15,10 @@
|
||||
#include "components/viz/host/host_frame_sink_manager.h"
|
||||
#include "components/viz/test/fake_host_frame_sink_client.h"
|
||||
#include "services/ws/event_test_utils.h"
|
||||
#include "services/ws/proxy_window.h"
|
||||
#include "services/ws/proxy_window_test_helper.h"
|
||||
#include "services/ws/public/cpp/property_type_converters.h"
|
||||
#include "services/ws/public/mojom/window_manager.mojom.h"
|
||||
#include "services/ws/server_window.h"
|
||||
#include "services/ws/server_window_test_helper.h"
|
||||
#include "services/ws/window_delegate_impl.h"
|
||||
#include "services/ws/window_service.h"
|
||||
#include "services/ws/window_service_test_setup.h"
|
||||
@ -1218,17 +1218,16 @@ TEST(WindowTreeTest, PointerDownResetOnCaptureChange) {
|
||||
ui::test::EventGenerator event_generator(setup.root());
|
||||
event_generator.MoveMouseTo(5, 5);
|
||||
event_generator.PressLeftButton();
|
||||
ServerWindow* top_level_server_window = ServerWindow::GetMayBeNull(top_level);
|
||||
ASSERT_TRUE(top_level_server_window);
|
||||
ServerWindowTestHelper top_level_server_window_helper(
|
||||
top_level_server_window);
|
||||
EXPECT_TRUE(top_level_server_window_helper.IsHandlingPointerPress(
|
||||
ProxyWindow* top_level_proxy_window = ProxyWindow::GetMayBeNull(top_level);
|
||||
ASSERT_TRUE(top_level_proxy_window);
|
||||
ProxyWindowTestHelper top_level_proxy_window_helper(top_level_proxy_window);
|
||||
EXPECT_TRUE(top_level_proxy_window_helper.IsHandlingPointerPress(
|
||||
ui::MouseEvent::kMousePointerId));
|
||||
|
||||
// Set capture on |window|, top_level should no longer be in pointer-down
|
||||
// (because capture changed).
|
||||
EXPECT_TRUE(setup.window_tree_test_helper()->SetCapture(window));
|
||||
EXPECT_FALSE(top_level_server_window_helper.IsHandlingPointerPress(
|
||||
EXPECT_FALSE(top_level_proxy_window_helper.IsHandlingPointerPress(
|
||||
ui::MouseEvent::kMousePointerId));
|
||||
}
|
||||
|
||||
@ -1245,16 +1244,15 @@ TEST(WindowTreeTest, PointerDownResetOnHide) {
|
||||
ui::test::EventGenerator event_generator(setup.root());
|
||||
event_generator.MoveMouseTo(5, 5);
|
||||
event_generator.PressLeftButton();
|
||||
ServerWindow* top_level_server_window = ServerWindow::GetMayBeNull(top_level);
|
||||
ASSERT_TRUE(top_level_server_window);
|
||||
ServerWindowTestHelper top_level_server_window_helper(
|
||||
top_level_server_window);
|
||||
EXPECT_TRUE(top_level_server_window_helper.IsHandlingPointerPress(
|
||||
ProxyWindow* top_level_proxy_window = ProxyWindow::GetMayBeNull(top_level);
|
||||
ASSERT_TRUE(top_level_proxy_window);
|
||||
ProxyWindowTestHelper top_level_proxy_window_helper(top_level_proxy_window);
|
||||
EXPECT_TRUE(top_level_proxy_window_helper.IsHandlingPointerPress(
|
||||
ui::MouseEvent::kMousePointerId));
|
||||
|
||||
// Hiding should implicitly cancel capture.
|
||||
top_level->Hide();
|
||||
EXPECT_FALSE(top_level_server_window_helper.IsHandlingPointerPress(
|
||||
EXPECT_FALSE(top_level_proxy_window_helper.IsHandlingPointerPress(
|
||||
ui::MouseEvent::kMousePointerId));
|
||||
}
|
||||
|
||||
@ -1342,7 +1340,7 @@ TEST(WindowTreeTest, Embed) {
|
||||
const Id embed_window_transport_id =
|
||||
setup.window_tree_test_helper()->TransportIdForWindow(embed_window);
|
||||
EXPECT_EQ(embed_window_transport_id, (*setup.changes())[0].window_id);
|
||||
EXPECT_EQ(ServerWindow::GetMayBeNull(embed_window)->frame_sink_id(),
|
||||
EXPECT_EQ(ProxyWindow::GetMayBeNull(embed_window)->frame_sink_id(),
|
||||
(*setup.changes())[0].frame_sink_id);
|
||||
}
|
||||
|
||||
@ -1543,10 +1541,10 @@ TEST(WindowTreeTest, DeleteEmbededTreeFromScheduleEmbedForExistingClient) {
|
||||
&embed_result));
|
||||
EXPECT_TRUE(embed_callback_called);
|
||||
EXPECT_TRUE(embed_result);
|
||||
EXPECT_TRUE(ServerWindow::GetMayBeNull(window_in_parent)->HasEmbedding());
|
||||
EXPECT_TRUE(ProxyWindow::GetMayBeNull(window_in_parent)->HasEmbedding());
|
||||
|
||||
tree2.reset();
|
||||
EXPECT_FALSE(ServerWindow::GetMayBeNull(window_in_parent)->HasEmbedding());
|
||||
EXPECT_FALSE(ProxyWindow::GetMayBeNull(window_in_parent)->HasEmbedding());
|
||||
}
|
||||
|
||||
TEST(WindowTreeTest, StackAtTop) {
|
||||
@ -2044,15 +2042,15 @@ TEST(WindowTreeTest, DsfChanges) {
|
||||
setup.window_tree_test_helper()->NewTopLevelWindow();
|
||||
ASSERT_TRUE(top_level);
|
||||
top_level->Show();
|
||||
ServerWindow* top_level_server_window = ServerWindow::GetMayBeNull(top_level);
|
||||
ProxyWindow* top_level_proxy_window = ProxyWindow::GetMayBeNull(top_level);
|
||||
const base::Optional<viz::LocalSurfaceId> initial_surface_id =
|
||||
top_level_server_window->local_surface_id();
|
||||
top_level_proxy_window->local_surface_id();
|
||||
EXPECT_TRUE(initial_surface_id);
|
||||
|
||||
// Changing the scale factor should change the LocalSurfaceId.
|
||||
setup.aura_test_helper()->test_screen()->SetDeviceScaleFactor(2.0f);
|
||||
EXPECT_TRUE(top_level_server_window->local_surface_id());
|
||||
EXPECT_NE(*top_level_server_window->local_surface_id(), *initial_surface_id);
|
||||
EXPECT_TRUE(top_level_proxy_window->local_surface_id());
|
||||
EXPECT_NE(*top_level_proxy_window->local_surface_id(), *initial_surface_id);
|
||||
}
|
||||
|
||||
TEST(WindowTreeTest, DontSendGestures) {
|
||||
@ -2142,16 +2140,16 @@ TEST(WindowTreeTest, AttachFrameSinkId) {
|
||||
test_frame_sink_id, &test_host_frame_sink_client,
|
||||
viz::ReportFirstSurfaceActivation::kYes);
|
||||
EXPECT_EQ(test_frame_sink_id,
|
||||
ServerWindow::GetMayBeNull(child_window)->attached_frame_sink_id());
|
||||
ProxyWindow::GetMayBeNull(child_window)->attached_frame_sink_id());
|
||||
top_level->AddChild(child_window);
|
||||
EXPECT_TRUE(host_frame_sink_manager->IsFrameSinkHierarchyRegistered(
|
||||
ServerWindow::GetMayBeNull(top_level)->frame_sink_id(),
|
||||
ProxyWindow::GetMayBeNull(top_level)->frame_sink_id(),
|
||||
test_frame_sink_id));
|
||||
|
||||
// Removing the window should remove the association.
|
||||
top_level->RemoveChild(child_window);
|
||||
EXPECT_FALSE(host_frame_sink_manager->IsFrameSinkHierarchyRegistered(
|
||||
ServerWindow::GetMayBeNull(top_level)->frame_sink_id(),
|
||||
ProxyWindow::GetMayBeNull(top_level)->frame_sink_id(),
|
||||
test_frame_sink_id));
|
||||
|
||||
setup.window_tree_test_helper()->DeleteWindow(child_window);
|
||||
|
Reference in New Issue
Block a user