1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_LIB_VIEW_MANAGER_CLIENT_IMPL_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_LIB_VIEW_MANAGER_CLIENT_IMPL_H_ 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/basictypes.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/callback.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/scoped_vector.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/weak_ptr.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "mojo/services/public/cpp/geometry/geometry_type_converters.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/types.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view_manager.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h" 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/public/interfaces/window_manager/window_manager.mojom.h" 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SkBitmap; 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace mojo { 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ViewManager; 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ViewManagerDelegate; 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ViewManagerTransaction; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass Shell; 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Manages the connection with the View Manager service. 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ViewManagerClientImpl : public ViewManager, 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public InterfaceImpl<ViewManagerClient>, 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public WindowManagerClient { 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ViewManagerClientImpl(ViewManagerDelegate* delegate, Shell* shell); 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~ViewManagerClientImpl(); 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool connected() const { return connected_; } 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ConnectionSpecificId connection_id() const { return connection_id_; } 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // API exposed to the view implementations that pushes local changes to the 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // service. 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Id CreateView(); 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DestroyView(Id view_id); 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // These methods take TransportIds. For views owned by the current connection, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the connection id high word can be zero. In all cases, the TransportId 0x1 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // refers to the root view. 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void AddChild(Id child_id, Id parent_id); 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void RemoveChild(Id child_id, Id parent_id); 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void Reorder(Id view_id, Id relative_view_id, OrderDirection direction); 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Returns true if the specified view was created by this connection. 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool OwnsView(Id id) const; 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void SetBounds(Id view_id, const gfx::Rect& bounds); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetSurfaceId(Id view_id, SurfaceIdPtr surface_id); 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void SetFocus(Id view_id); 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void SetVisible(Id view_id, bool visible); 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void Embed(const String& url, Id view_id); 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void Embed(const String& url, 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Id view_id, 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ServiceProviderPtr service_provider); 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void set_change_acked_callback(const base::Callback<void(void)>& callback) { 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) change_acked_callback_ = callback; 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void ClearChangeAckedCallback() { 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) change_acked_callback_ = base::Callback<void(void)>(); 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Start/stop tracking views. While tracked, they can be retrieved via 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // ViewManager::GetViewById. 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void AddView(View* view); 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void RemoveView(Id view_id); 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell* shell() { return shell_; } 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) friend class RootObserver; 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) typedef std::map<Id, View*> IdToViewMap; 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Overridden from ViewManager: 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void SetWindowManagerDelegate( 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WindowManagerDelegate* delegate) OVERRIDE; 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void DispatchEvent(View* target, EventPtr event) OVERRIDE; 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual const std::string& GetEmbedderURL() const OVERRIDE; 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual const std::vector<View*>& GetRoots() const OVERRIDE; 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual View* GetViewById(Id id) OVERRIDE; 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Overridden from InterfaceImpl: 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnConnectionEstablished() OVERRIDE; 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Overridden from ViewManagerClient: 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void OnEmbed(ConnectionSpecificId connection_id, 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const String& creator_url, 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewDataPtr root, 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InterfaceRequest<ServiceProvider> services) OVERRIDE; 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnViewBoundsChanged(Id view_id, 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RectPtr old_bounds, 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RectPtr new_bounds) OVERRIDE; 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnViewHierarchyChanged(Id view_id, 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Id new_parent_id, 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Id old_parent_id, 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Array<ViewDataPtr> views) OVERRIDE; 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnViewReordered(Id view_id, 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Id relative_view_id, 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OrderDirection direction) OVERRIDE; 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnViewDeleted(Id view_id) OVERRIDE; 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnViewVisibilityChanged(Id view_id, bool visible) OVERRIDE; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnViewDrawnStateChanged(Id view_id, bool drawn) OVERRIDE; 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnViewInputEvent(Id view_id, 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EventPtr event, 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Callback<void()>& callback) OVERRIDE; 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Embed( 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const String& url, 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InterfaceRequest<ServiceProvider> service_provider) OVERRIDE; 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void DispatchOnViewInputEvent(EventPtr event) OVERRIDE; 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Overridden from WindowManagerClient: 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnWindowManagerReady() OVERRIDE; 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnCaptureChanged(Id old_capture_view_id, 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Id new_capture_view_id) OVERRIDE; 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnFocusChanged(Id old_focused_view_id, 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Id new_focused_view_id) OVERRIDE; 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnActiveWindowChanged(Id old_focused_window, 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Id new_focused_window) OVERRIDE; 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void RemoveRoot(View* root); 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnActionCompleted(bool success); 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnActionCompletedWithErrorCode(ErrorCode code); 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BitmapUploader* BitmapUploaderForView(Id view_id); 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Callback<void(bool)> ActionCompletedCallback(); 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Callback<void(ErrorCode)> ActionCompletedCallbackWithErrorCode(); 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool connected_; 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ConnectionSpecificId connection_id_; 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ConnectionSpecificId next_id_; 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string creator_url_; 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Callback<void(void)> change_acked_callback_; 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ViewManagerDelegate* delegate_; 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WindowManagerDelegate* window_manager_delegate_; 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<View*> roots_; 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IdToViewMap views_; 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ViewManagerService* service_; 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) WindowManagerServicePtr window_manager_; 1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jamesr): Remove once all callers switch from SetContents to 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // SetSurfaceId. 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell* shell_; 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ViewManagerClientImpl); 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace mojo 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_LIB_VIEW_MANAGER_CLIENT_IMPL_H_ 168