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_REMOTE_WINDOW_TREE_HOST_WIN_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define UI_AURA_REMOTE_WINDOW_TREE_HOST_WIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 115e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/aura/window_tree_host.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/base/ime/remote_input_method_delegate_win.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/events/event_source.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/native_widget_types.h" 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/metro_viewer/ime_types.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct MetroViewerHostMsg_MouseButtonParams; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RemoteInputMethodPrivateWin; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ViewProp; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace IPC { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Message; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Sender; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// WindowTreeHost implementaton that receives events from a different 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// process. In the case of Windows this is the Windows 8 (aka Metro) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// frontend process, which forwards input events to this class. 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AURA_EXPORT RemoteWindowTreeHostWin 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : public WindowTreeHost, 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public ui::EventSource, 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public ui::internal::RemoteInputMethodDelegateWin { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns the current RemoteWindowTreeHostWin. This does *not* create a 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // RemoteWindowTreeHostWin. 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static RemoteWindowTreeHostWin* Instance(); 49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns true if there is a RemoteWindowTreeHostWin and it has a valid 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // HWND. A return value of false typically indicates we're not in metro mode. 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static bool IsValid(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets the handle to the remote window. The |remote_window| is the actual 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // window owned by the viewer process. Call this before Connected() for some 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // customers like input method initialization which needs the handle. 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetRemoteWindowHandle(HWND remote_window); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) HWND remote_window() { return remote_window_; } 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The |host| can be used when we need to send a message to it. 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Connected(IPC::Sender* host); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when the remote process has closed its IPC connection. 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Disconnected(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when we have a message from the remote process. 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OnMessageReceived(const IPC::Message& message); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void HandleOpenURLOnDesktop(const base::FilePath& shortcut, 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::string16& url); 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void HandleWindowSizeChanged(uint32 width, uint32 height); 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns the active ASH root window. 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Window* GetAshWindow(); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns true if the remote window is the foreground window according to the 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // OS. 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool IsForegroundWindow(); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch protected: 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RemoteWindowTreeHostWin(); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~RemoteWindowTreeHostWin(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch private: 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // IPC message handing methods: 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnMouseMoved(int32 x, int32 y, int32 flags); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnMouseButton(const MetroViewerHostMsg_MouseButtonParams& params); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnKeyDown(uint32 vkey, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 repeat_count, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 scan_code, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 flags); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnKeyUp(uint32 vkey, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 repeat_count, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 scan_code, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 flags); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnChar(uint32 key_code, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 repeat_count, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 scan_code, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 flags); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnWindowActivated(bool repaint); 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnEdgeGesture(); 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnTouchDown(int32 x, int32 y, uint64 timestamp, uint32 pointer_id); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnTouchUp(int32 x, int32 y, uint64 timestamp, uint32 pointer_id); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnTouchMoved(int32 x, int32 y, uint64 timestamp, uint32 pointer_id); 105b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void OnSetCursorPosAck(); 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // For Input Method support: 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::RemoteInputMethodPrivateWin* GetRemoteInputMethodPrivate(); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnImeCandidatePopupChanged(bool visible); 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnImeCompositionChanged( 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& text, 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int32 selection_start, 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int32 selection_end, 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<metro_viewer::UnderlineInfo>& underlines); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnImeTextCommitted(const base::string16& text); 116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnImeInputSourceChanged(uint16 language_id, bool is_ime); 117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // WindowTreeHost overrides: 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ui::EventSource* GetEventSource() OVERRIDE; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Show() OVERRIDE; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Hide() OVERRIDE; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetBounds() const OVERRIDE; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetCapture() OVERRIDE; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReleaseCapture() OVERRIDE; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PostNativeEvent(const base::NativeEvent& native_event) OVERRIDE; 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetCursorNative(gfx::NativeCursor cursor) OVERRIDE; 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void MoveCursorToNative(const gfx::Point& location) OVERRIDE; 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnCursorVisibilityChangedNative(bool show) OVERRIDE; 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ui::EventSource: 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ui::EventProcessor* GetEventProcessor() OVERRIDE; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // ui::internal::RemoteInputMethodDelegateWin overrides: 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void CancelComposition() OVERRIDE; 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnTextInputClientUpdated( 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<int32>& input_scopes, 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<gfx::Rect>& composition_character_bounds) OVERRIDE; 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to dispatch a keyboard message to the desired target. 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The default target is the WindowEventDispatcher. For nested message loop 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // invocations we post a synthetic keyboard message directly into the message 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // loop. The dispatcher for the nested loop would then decide how this 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // message is routed. 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DispatchKeyboardMessage(ui::EventType type, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 vkey, 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 repeat_count, 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 scan_code, 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 flags, 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_character); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Sets the event flags. |flags| is a bitmask of EventFlags. If there is a 1558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // change the system virtual key state is updated as well. This way if chrome 1568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // queries for key state it matches that of event being dispatched. 1578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void SetEventFlags(uint32 flags); 1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32 mouse_event_flags() const { 1608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return event_flags_ & (ui::EF_LEFT_MOUSE_BUTTON | 1618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ui::EF_MIDDLE_MOUSE_BUTTON | 1628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ui::EF_RIGHT_MOUSE_BUTTON); 1638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32 key_event_flags() const { 1668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return event_flags_ & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | 1678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ui::EF_ALT_DOWN | ui::EF_CAPS_LOCK_DOWN); 1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) HWND remote_window_; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC::Sender* host_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ui::ViewProp> prop_; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Incremented if we need to ignore mouse messages until the SetCursorPos 175b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // operation is acked by the viewer. 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int ignore_mouse_moves_until_set_cursor_ack_; 177b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1789ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Tracking last click event for synthetically generated mouse events. 1799ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch scoped_ptr<ui::MouseEvent> last_mouse_click_event_; 1809ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // State of the keyboard/mouse at the time of the last input event. See 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // description of SetEventFlags(). 1838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32 event_flags_; 1848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Current size of this root window. 186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Size window_size_; 187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RemoteWindowTreeHostWin); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace aura 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // UI_AURA_REMOTE_WINDOW_TREE_HOST_WIN_H_ 194