Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Side by Side Diff: win8/viewer/metro_viewer_process_host.h

Issue 1586843002: Remove remote tree host and some related input and metro_driver code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@metro-mode-3
Patch Set: remove ash_unittests from being run Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « win8/viewer/metro_viewer_exports.h ('k') | win8/viewer/metro_viewer_process_host.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013 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.
4
5 #ifndef WIN8_VIEWER_METRO_VIEWER_PROCESS_HOST_H_
6 #define WIN8_VIEWER_METRO_VIEWER_PROCESS_HOST_H_
7
8 #include <stdint.h>
9
10 #include "base/callback.h"
11 #include "base/macros.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/strings/string16.h"
15 #include "base/threading/non_thread_safe.h"
16 #include "ipc/ipc_channel_proxy.h"
17 #include "ipc/ipc_listener.h"
18 #include "ipc/ipc_sender.h"
19 #include "ipc/message_filter.h"
20 #include "ui/gfx/native_widget_types.h"
21 #include "win8/viewer/metro_viewer_exports.h"
22
23 namespace base {
24 class SingleThreadTaskRunner;
25 class WaitableEvent;
26 }
27
28 namespace IPC {
29 class ChannelProxy;
30 class Message;
31 }
32
33 namespace win8 {
34
35 // Abstract base class for various Metro viewer process host implementations.
36 class METRO_VIEWER_EXPORT MetroViewerProcessHost : public IPC::Listener,
37 public IPC::Sender,
38 public base::NonThreadSafe {
39 public:
40 typedef base::Callback<void(const base::FilePath&, int, void*)>
41 OpenFileCompletion;
42
43 typedef base::Callback<void(const std::vector<base::FilePath>&, void*)>
44 OpenMultipleFilesCompletion;
45
46 typedef base::Callback<void(const base::FilePath&, int, void*)>
47 SaveFileCompletion;
48
49 typedef base::Callback<void(const base::FilePath&, int, void*)>
50 SelectFolderCompletion;
51
52 typedef base::Callback<void(void*)> FileSelectionCanceled;
53
54 // Initializes a viewer process host to connect to the Metro viewer process
55 // over IPC. The given task runner correspond to a thread on which
56 // IPC::Channel is created and used (e.g. IO thread). Instantly connects to
57 // the viewer process if one is already connected to |ipc_channel_name|; a
58 // viewer can otherwise be launched synchronously via
59 // LaunchViewerAndWaitForConnection().
60 explicit MetroViewerProcessHost(
61 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner);
62 ~MetroViewerProcessHost() override;
63
64 // Returns the process id of the viewer process if one is connected to this
65 // host, returns base::kNullProcessId otherwise.
66 base::ProcessId GetViewerProcessId();
67
68 // Launches the viewer process associated with the given |app_user_model_id|
69 // and blocks until that viewer process connects or until a timeout is
70 // reached. Returns true if the viewer process connects before the timeout is
71 // reached. NOTE: this assumes that the app referred to by |app_user_model_id|
72 // is registered as the default browser.
73 bool LaunchViewerAndWaitForConnection(
74 const base::string16& app_user_model_id);
75
76 // Handles the activate desktop command for Metro Chrome Ash. The |ash_exit|
77 // parameter indicates whether the Ash process would be shutdown after
78 // activating the desktop.
79 static void HandleActivateDesktop(const base::FilePath& shortcut,
80 bool ash_exit);
81
82 // Handles the metro exit command. Notifies the metro viewer to shutdown
83 // gracefully.
84 static void HandleMetroExit();
85
86 // Handles the open file operation for Metro Chrome Ash. The on_success
87 // callback passed in is invoked when we receive the opened file name from
88 // the metro viewer. The on failure callback is invoked on failure.
89 static void HandleOpenFile(const base::string16& title,
90 const base::FilePath& default_path,
91 const base::string16& filter,
92 const OpenFileCompletion& on_success,
93 const FileSelectionCanceled& on_failure);
94
95 // Handles the open multiple file operation for Metro Chrome Ash. The
96 // on_success callback passed in is invoked when we receive the opened file
97 // names from the metro viewer. The on failure callback is invoked on failure.
98 static void HandleOpenMultipleFiles(
99 const base::string16& title,
100 const base::FilePath& default_path,
101 const base::string16& filter,
102 const OpenMultipleFilesCompletion& on_success,
103 const FileSelectionCanceled& on_failure);
104
105 // Handles the save file operation for Metro Chrome Ash. The on_success
106 // callback passed in is invoked when we receive the saved file name from
107 // the metro viewer. The on failure callback is invoked on failure.
108 static void HandleSaveFile(const base::string16& title,
109 const base::FilePath& default_path,
110 const base::string16& filter,
111 int filter_index,
112 const base::string16& default_extension,
113 const SaveFileCompletion& on_success,
114 const FileSelectionCanceled& on_failure);
115
116 // Handles the select folder for Metro Chrome Ash. The on_success
117 // callback passed in is invoked when we receive the folder name from the
118 // metro viewer. The on failure callback is invoked on failure.
119 static void HandleSelectFolder(const base::string16& title,
120 const SelectFolderCompletion& on_success,
121 const FileSelectionCanceled& on_failure);
122
123 protected:
124 // IPC::Sender implementation:
125 bool Send(IPC::Message* msg) override;
126
127 // IPC::Listener implementation:
128 bool OnMessageReceived(const IPC::Message& message) override;
129 void OnChannelError() override = 0;
130
131 private:
132 // The following are the implementation for the corresponding static methods
133 // above, see them for descriptions.
134 void HandleOpenFileImpl(const base::string16& title,
135 const base::FilePath& default_path,
136 const base::string16& filter,
137 const OpenFileCompletion& on_success,
138 const FileSelectionCanceled& on_failure);
139 void HandleOpenMultipleFilesImpl(
140 const base::string16& title,
141 const base::FilePath& default_path,
142 const base::string16& filter,
143 const OpenMultipleFilesCompletion& on_success,
144 const FileSelectionCanceled& on_failure);
145 void HandleSaveFileImpl(const base::string16& title,
146 const base::FilePath& default_path,
147 const base::string16& filter,
148 int filter_index,
149 const base::string16& default_extension,
150 const SaveFileCompletion& on_success,
151 const FileSelectionCanceled& on_failure);
152 void HandleSelectFolderImpl(const base::string16& title,
153 const SelectFolderCompletion& on_success,
154 const FileSelectionCanceled& on_failure);
155
156 // Called over IPC by the viewer process to tell this host that it should be
157 // drawing to |target_surface|.
158 virtual void OnSetTargetSurface(gfx::NativeViewId target_surface,
159 float device_scale) = 0;
160
161 // Called over IPC by the viewer process to request that the url passed in be
162 // opened.
163 virtual void OnOpenURL(const base::string16& url) = 0;
164
165 // Called over IPC by the viewer process to request that the search string
166 // passed in is passed to the default search provider and a URL navigation be
167 // performed.
168 virtual void OnHandleSearchRequest(const base::string16& search_string) = 0;
169
170 // Called over IPC by the viewer process when the window size has changed.
171 virtual void OnWindowSizeChanged(uint32_t width, uint32_t height) = 0;
172
173 void NotifyChannelConnected();
174
175 // IPC message handing methods:
176 void OnFileSaveAsDone(bool success,
177 const base::FilePath& filename,
178 int filter_index);
179 void OnFileOpenDone(bool success, const base::FilePath& filename);
180 void OnMultiFileOpenDone(bool success,
181 const std::vector<base::FilePath>& files);
182 void OnSelectFolderDone(bool success, const base::FilePath& folder);
183
184 // Inner message filter used to handle connection event on the IPC channel
185 // proxy's background thread. This prevents consumers of
186 // MetroViewerProcessHost from having to pump messages on their own message
187 // loop.
188 class InternalMessageFilter : public IPC::MessageFilter {
189 public:
190 InternalMessageFilter(MetroViewerProcessHost* owner);
191
192 // IPC::MessageFilter implementation.
193 void OnChannelConnected(int32_t peer_pid) override;
194
195 private:
196 ~InternalMessageFilter() override;
197
198 MetroViewerProcessHost* owner_;
199 DISALLOW_COPY_AND_ASSIGN(InternalMessageFilter);
200 };
201
202 scoped_ptr<IPC::ChannelProxy> channel_;
203 scoped_ptr<base::WaitableEvent> channel_connected_event_;
204 scoped_refptr<InternalMessageFilter> message_filter_;
205
206 static MetroViewerProcessHost* instance_;
207
208 // Saved callbacks which inform the caller about the result of the open file/
209 // save file/select operations.
210 OpenFileCompletion file_open_completion_callback_;
211 OpenMultipleFilesCompletion multi_file_open_completion_callback_;
212 SaveFileCompletion file_saveas_completion_callback_;
213 SelectFolderCompletion select_folder_completion_callback_;
214 FileSelectionCanceled failure_callback_;
215
216 DISALLOW_COPY_AND_ASSIGN(MetroViewerProcessHost);
217 };
218
219 } // namespace win8
220
221 #endif // WIN8_VIEWER_METRO_VIEWER_PROCESS_HOST_H_
OLDNEW
« no previous file with comments | « win8/viewer/metro_viewer_exports.h ('k') | win8/viewer/metro_viewer_process_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698