cc: Added inline to Tile::IsReadyToDraw
[chromium-blink-merge.git] / win8 / metro_driver / chrome_app_view_ash.h
blob57f20b95c41b40dc91934a43a103829aa01dc5ec
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"
20 namespace IPC {
21 class Listener;
22 class ChannelProxy;
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> {
34 public:
35 ChromeAppViewAsh();
36 ~ChromeAppViewAsh();
38 // IViewProvider overrides.
39 IFACEMETHOD(Initialize)(winapp::Core::ICoreApplicationView* view);
40 IFACEMETHOD(SetWindow)(winui::Core::ICoreWindow* window);
41 IFACEMETHOD(Load)(HSTRING entryPoint);
42 IFACEMETHOD(Run)();
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,
64 bool success);
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,
71 bool success);
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,
78 bool success);
80 private:
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
121 // requests.
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_