1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef WIN8_METRO_DRIVER_CHROME_APP_VIEW_ASH_H_
6 #define WIN8_METRO_DRIVER_CHROME_APP_VIEW_ASH_H_
8 #include <windows.applicationmodel.core.h>
9 #include <windows.ui.core.h>
10 #include <windows.ui.input.h>
11 #include <windows.ui.viewmanagement.h>
13 #include "base/files/file_path.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "base/message_loop/message_loop.h"
16 #include "base/strings/string16.h"
17 #include "ui/base/events/event_constants.h"
18 #include "win8/metro_driver/direct3d_helper.h"
25 class OpenFilePickerSession
;
26 class SaveFilePickerSession
;
27 class FolderPickerSession
;
28 class FilePickerSessionBase
;
30 struct MetroViewerHostMsg_SaveAsDialogParams
;
32 class ChromeAppViewAsh
33 : public mswr::RuntimeClass
<winapp::Core::IFrameworkView
> {
38 // IViewProvider overrides.
39 IFACEMETHOD(Initialize
)(winapp::Core::ICoreApplicationView
* view
);
40 IFACEMETHOD(SetWindow
)(winui::Core::ICoreWindow
* window
);
41 IFACEMETHOD(Load
)(HSTRING entryPoint
);
43 IFACEMETHOD(Uninitialize
)();
45 // Helper function to unsnap the chrome metro app if it is snapped.
46 // Returns S_OK on success.
47 static HRESULT
Unsnap();
49 void OnSetCursor(HCURSOR cursor
);
50 void OnDisplayFileOpenDialog(const string16
& title
,
51 const string16
& filter
,
52 const base::FilePath
& default_path
,
53 bool allow_multiple_files
);
54 void OnDisplayFileSaveAsDialog(
55 const MetroViewerHostMsg_SaveAsDialogParams
& params
);
56 void OnDisplayFolderPicker(const string16
& title
);
57 void OnSetCursorPos(int x
, int y
);
59 // This function is invoked when the open file operation completes. The
60 // result of the operation is passed in along with the OpenFilePickerSession
61 // instance which is deleted after we read the required information from
62 // the OpenFilePickerSession class.
63 void OnOpenFileCompleted(OpenFilePickerSession
* open_file_picker
,
66 // This function is invoked when the save file operation completes. The
67 // result of the operation is passed in along with the SaveFilePickerSession
68 // instance which is deleted after we read the required information from
69 // the SaveFilePickerSession class.
70 void OnSaveFileCompleted(SaveFilePickerSession
* save_file_picker
,
73 // This function is invoked when the folder picker operation completes. The
74 // result of the operation is passed in along with the FolderPickerSession
75 // instance which is deleted after we read the required information from
76 // the FolderPickerSession class.
77 void OnFolderPickerCompleted(FolderPickerSession
* folder_picker
,
81 HRESULT
OnActivate(winapp::Core::ICoreApplicationView
* view
,
82 winapp::Activation::IActivatedEventArgs
* args
);
84 HRESULT
OnPointerMoved(winui::Core::ICoreWindow
* sender
,
85 winui::Core::IPointerEventArgs
* args
);
87 HRESULT
OnPointerPressed(winui::Core::ICoreWindow
* sender
,
88 winui::Core::IPointerEventArgs
* args
);
90 HRESULT
OnPointerReleased(winui::Core::ICoreWindow
* sender
,
91 winui::Core::IPointerEventArgs
* args
);
93 HRESULT
OnWheel(winui::Core::ICoreWindow
* sender
,
94 winui::Core::IPointerEventArgs
* args
);
96 HRESULT
OnKeyDown(winui::Core::ICoreWindow
* sender
,
97 winui::Core::IKeyEventArgs
* args
);
99 HRESULT
OnKeyUp(winui::Core::ICoreWindow
* sender
,
100 winui::Core::IKeyEventArgs
* args
);
102 // Invoked for system keys like Alt, etc.
103 HRESULT
OnAcceleratorKeyDown(winui::Core::ICoreDispatcher
* sender
,
104 winui::Core::IAcceleratorKeyEventArgs
* args
);
106 HRESULT
OnCharacterReceived(winui::Core::ICoreWindow
* sender
,
107 winui::Core::ICharacterReceivedEventArgs
* args
);
109 HRESULT
OnVisibilityChanged(winui::Core::ICoreWindow
* sender
,
110 winui::Core::IVisibilityChangedEventArgs
* args
);
112 HRESULT
OnWindowActivated(winui::Core::ICoreWindow
* sender
,
113 winui::Core::IWindowActivatedEventArgs
* args
);
115 // Helper to handle search requests received via the search charm in ASH.
116 HRESULT
HandleSearchRequest(winapp::Activation::IActivatedEventArgs
* args
);
117 // Helper to handle http/https url requests in ASH.
118 HRESULT
HandleProtocolRequest(winapp::Activation::IActivatedEventArgs
* args
);
120 // Tasks posted to the UI thread to initiate the search/url navigation
122 void OnSearchRequest(const string16
& search_string
);
123 void OnNavigateToUrl(const string16
& url
);
125 HRESULT
OnSizeChanged(winui::Core::ICoreWindow
* sender
,
126 winui::Core::IWindowSizeChangedEventArgs
* args
);
128 mswr::ComPtr
<winui::Core::ICoreWindow
> window_
;
129 mswr::ComPtr
<winapp::Core::ICoreApplicationView
> view_
;
130 EventRegistrationToken activated_token_
;
131 EventRegistrationToken pointermoved_token_
;
132 EventRegistrationToken pointerpressed_token_
;
133 EventRegistrationToken pointerreleased_token_
;
134 EventRegistrationToken wheel_token_
;
135 EventRegistrationToken keydown_token_
;
136 EventRegistrationToken keyup_token_
;
137 EventRegistrationToken character_received_token_
;
138 EventRegistrationToken visibility_changed_token_
;
139 EventRegistrationToken accel_keydown_token_
;
140 EventRegistrationToken accel_keyup_token_
;
141 EventRegistrationToken window_activated_token_
;
142 EventRegistrationToken sizechange_token_
;
144 // Keep state about which button is currently down, if any, as PointerMoved
145 // events do not contain that state, but Ash's MouseEvents need it.
146 ui::EventFlags mouse_down_flags_
;
148 // Set the D3D swap chain and nothing else.
149 metro_driver::Direct3DHelper direct3d_helper_
;
151 // The channel to Chrome, in particular to the MetroViewerProcessHost.
152 IPC::ChannelProxy
* ui_channel_
;
154 // The actual window behind the view surface.
155 HWND core_window_hwnd_
;
157 // UI message loop to allow message passing into this thread.
158 base::MessageLoop ui_loop_
;
161 #endif // WIN8_METRO_DRIVER_CHROME_APP_VIEW_ASH_H_