15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef UI_AURA_WINDOW_TREE_HOST_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define UI_AURA_WINDOW_TREE_HOST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/event_types.h" 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/aura_export.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/cursor/cursor.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/events/event_source.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Insets; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Point; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Size; 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Transform; 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ui { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Compositor; 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class EventProcessor; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ViewProp; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace test { 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass WindowTreeHostTestApi; 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WindowEventDispatcher; 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WindowTreeHostObserver; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// WindowTreeHost bridges between a native window and the embedded RootWindow. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It provides the accelerated widget and maps events from the native os to 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// aura. 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AURA_EXPORT WindowTreeHost { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~WindowTreeHost(); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Creates a new WindowTreeHost. The caller owns the returned value. 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static WindowTreeHost* Create(const gfx::Rect& bounds); 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns the WindowTreeHost for the specified accelerated widget, or NULL 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // if there is none associated. 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static WindowTreeHost* GetForAcceleratedWidget(gfx::AcceleratedWidget widget); 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void InitHost(); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void InitCompositor(); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void AddObserver(WindowTreeHostObserver* observer); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void RemoveObserver(WindowTreeHostObserver* observer); 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Window* window() { return window_; } 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const Window* window() const { return window_; } 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::EventProcessor* event_processor(); 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WindowEventDispatcher* dispatcher() { 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return const_cast<WindowEventDispatcher*>( 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const_cast<const WindowTreeHost*>(this)->dispatcher()); 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const WindowEventDispatcher* dispatcher() const { return dispatcher_.get(); } 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::Compositor* compositor() { return compositor_.get(); } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Gets/Sets the root window's transform. 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual gfx::Transform GetRootTransform() const; 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void SetRootTransform(const gfx::Transform& transform); 76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual gfx::Transform GetInverseRootTransform() const; 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Updates the root window's size using |host_size|, current 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // transform and insets. 80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void UpdateRootWindowSize(const gfx::Size& host_size); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the actual size of the screen. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (gfx::Screen only reports on the virtual desktop exposed by Aura.) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static gfx::Size GetNativeScreenSize(); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Converts |point| from the root window's coordinate system to native 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // screen's. 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ConvertPointToNativeScreen(gfx::Point* point) const; 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Converts |point| from native screen coordinate system to the root window's. 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ConvertPointFromNativeScreen(gfx::Point* point) const; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Converts |point| from the root window's coordinate system to the 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // host window's. 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ConvertPointToHost(gfx::Point* point) const; 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Converts |point| from the host window's coordinate system to the 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // root window's. 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ConvertPointFromHost(gfx::Point* point) const; 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Cursor. 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets the currently-displayed cursor. If the cursor was previously hidden 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // via ShowCursor(false), it will remain hidden until ShowCursor(true) is 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // called, at which point the cursor that was last set via SetCursor() will be 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // used. 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetCursor(gfx::NativeCursor cursor); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Invoked when the cursor's visibility has changed. 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnCursorVisibilityChanged(bool visible); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Moves the cursor to the specified location relative to the root window. 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MoveCursorTo(const gfx::Point& location); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Moves the cursor to the |host_location| given in host coordinates. 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MoveCursorToHostLocation(const gfx::Point& host_location); 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::NativeCursor last_cursor() const { return last_cursor_; } 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Returns the EventSource responsible for dispatching events to the window 1205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // tree. 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ui::EventSource* GetEventSource() = 0; 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the accelerated widget. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::AcceleratedWidget GetAcceleratedWidget() = 0; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Shows the WindowTreeHost. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Show() = 0; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Hides the WindowTreeHost. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Hide() = 0; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Gets/Sets the size of the WindowTreeHost. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetBounds() const = 0; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBounds(const gfx::Rect& bounds) = 0; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the OS capture to the root window. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetCapture() = 0; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Releases OS capture of the root window. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReleaseCapture() = 0; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Posts |native_event| to the platform's event queue. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PostNativeEvent(const base::NativeEvent& native_event) = 0; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend class TestScreen; // TODO(beng): see if we can remove/consolidate. 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WindowTreeHost(); 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DestroyCompositor(); 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DestroyDispatcher(); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void CreateCompositor(gfx::AcceleratedWidget accelerated_widget); 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns the location of the RootWindow on native screen. 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual gfx::Point GetLocationOnNativeScreen() const = 0; 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnHostMoved(const gfx::Point& new_location); 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnHostResized(const gfx::Size& new_size); 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnHostCloseRequested(); 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnHostActivated(); 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnHostLostWindowCapture(); 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets the currently displayed cursor. 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetCursorNative(gfx::NativeCursor cursor) = 0; 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Moves the cursor to the specified location relative to the root window. 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void MoveCursorToNative(const gfx::Point& location) = 0; 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // kCalled when the cursor visibility has changed. 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnCursorVisibilityChangedNative(bool show) = 0; 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 1735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu friend class test::WindowTreeHostTestApi; 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Moves the cursor to the specified location. This method is internally used 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // by MoveCursorTo() and MoveCursorToHostLocation(). 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MoveCursorToInternal(const gfx::Point& root_location, 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Point& host_location); 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // We don't use a scoped_ptr for |window_| since we need this ptr to be valid 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // during its deletion. (Window's dtor notifies observers that may attempt to 182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // reach back up to access this object which will be valid until the end of 183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // the dtor). 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Window* window_; // Owning. 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ObserverList<WindowTreeHostObserver> observers_; 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<WindowEventDispatcher> dispatcher_; 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<ui::Compositor> compositor_; 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Last cursor set. Used for testing. 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::NativeCursor last_cursor_; 1945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::Point last_cursor_request_position_in_host_; 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<ui::ViewProp> prop_; 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WindowTreeHost); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace aura 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // UI_AURA_WINDOW_TREE_HOST_H_ 204