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

Side by Side Diff: ui/progress_wnd.h

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 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 | « ui/complete_wnd.cc ('k') | ui/progress_wnd.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 2008-2010 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 #ifndef OMAHA_UI_PROGRESS_WND_H_
17 #define OMAHA_UI_PROGRESS_WND_H_
18
19 #include <atlbase.h>
20 #include <vector>
21 #include "base/scoped_ptr.h"
22 #include "omaha/base/scoped_any.h"
23 #include "omaha/base/time.h"
24 #include "omaha/base/wtl_atlapp_wrapper.h"
25 #include "omaha/client/install_progress_observer.h"
26 #include "omaha/ui/complete_wnd.h"
27 #include "omaha/ui/uilib/static_ex.h"
28
29 namespace omaha {
30
31 class HighresTimer;
32
33 // The message is used to communicate between InstallStoppedWnd and
34 // ProgressWnd.
35 const DWORD WM_INSTALL_STOPPED = WM_APP;
36
37 class ProgressWndEvents : public CompleteWndEvents {
38 public:
39 // Restarts the browser(s) and returns whether the browser was successfully
40 // restarted.
41 // If restart_all_browsers is true, all known browsers will be shutdown.
42 // Otherwise only one type of browser will be shutdown. The concrete class
43 // is expected to know which browser to shutdown in that case.
44 // After that, only one type of browser will be restarted with the given URLs.
45 //
46 // Major browsers that support multi-tab differ how to open multiple URLs:
47 // IExplorer (8.0): opens each URL in a separate window.
48 // Firefox (3.6): by default if there is Firefox instance running, the URLs
49 // will be opened in tabs in the same window. Otherwise each URL will
50 // have its own window. Since we shutdown browser(s) first, it is
51 // more likely to result in multiple windows.
52 // Chrome (5.0): opens each URL in a separate tab in the same window.
53 virtual bool DoRestartBrowser(bool restart_all_browsers,
54 const std::vector<CString>& urls) = 0;
55
56 // Initiates a reboot and returns whether it was iniated successfully.
57 virtual bool DoReboot() = 0;
58
59 // Indicates that current operation is canceled.
60 virtual void DoCancel() = 0;
61 };
62
63 // Implements the "Installation Stopped" window. InstallStoppedWnd is
64 // modal relative to its parent. When InstallStoppedWnd is closed it sends
65 // a user message to its parent to notify which button the user has clicked on.
66 class InstallStoppedWnd
67 : public CAxDialogImpl<InstallStoppedWnd>,
68 public CMessageFilter {
69 typedef CAxDialogImpl<InstallStoppedWnd> Base;
70 public:
71 static const int IDD = IDD_INSTALL_STOPPED;
72
73 InstallStoppedWnd(CMessageLoop* message_loop, HWND parent);
74 ~InstallStoppedWnd();
75
76 // Closes the window, handling transition back to the parent window.
77 HRESULT CloseWindow();
78
79 BOOL PreTranslateMessage(MSG* msg) {
80 return CWindow::IsDialogMessage(msg);
81 }
82
83 BEGIN_MSG_MAP(InstallStoppedWnd)
84 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
85 MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
86 COMMAND_ID_HANDLER(IDOK, OnClickButton)
87 COMMAND_ID_HANDLER(IDCANCEL, OnClickButton)
88 CHAIN_MSG_MAP(Base)
89 END_MSG_MAP()
90
91 private:
92 // Message and command handlers.
93 LRESULT OnInitDialog(UINT msg, WPARAM wparam, LPARAM lparam, BOOL& handled); // NOLINT
94 LRESULT OnClickButton(WORD notify_code, WORD id, HWND wnd_ctl, BOOL& handled); // NOLINT
95 LRESULT OnDestroy(UINT msg, WPARAM wparam, LPARAM lparam, BOOL& handled); // NOLINT
96
97 CMessageLoop* message_loop_;
98 HWND parent_;
99
100 DISALLOW_EVIL_CONSTRUCTORS(InstallStoppedWnd);
101 };
102
103
104 // Implements the UI progress window.
105 class ProgressWnd
106 : public CompleteWnd,
107 public InstallProgressObserver {
108 public:
109 ProgressWnd(CMessageLoop* message_loop, HWND parent);
110 virtual ~ProgressWnd();
111
112 void SetEventSink(ProgressWndEvents* ev);
113
114 // InstallProgressObserver methods.
115 // TODO(omaha3): Update this comment.
116 // These methods are called by the job to transition the UI from
117 // one state to another. The methods are always executed by the thread
118 // that created this window.
119 virtual void OnCheckingForUpdate();
120 virtual void OnUpdateAvailable(const CString& app_name,
121 const CString& version_string);
122 virtual void OnWaitingToDownload(const CString& app_name);
123 virtual void OnDownloading(const CString& app_name,
124 int time_remaining_ms,
125 int pos);
126 virtual void OnWaitingRetryDownload(const CString& app_name,
127 time64 next_retry_time);
128 virtual void OnWaitingToInstall(const CString& app_name,
129 bool* can_start_install);
130 virtual void OnInstalling(const CString& app_name);
131 virtual void OnPause();
132 virtual void OnComplete(const ObserverCompletionInfo& observer_info);
133
134 BEGIN_MSG_MAP(ProgressWnd)
135 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
136 MESSAGE_HANDLER(WM_INSTALL_STOPPED, OnInstallStopped)
137 COMMAND_HANDLER(IDC_BUTTON1, BN_CLICKED, OnClickedButton)
138 COMMAND_HANDLER(IDC_BUTTON2, BN_CLICKED, OnClickedButton)
139 COMMAND_HANDLER(IDC_CLOSE, BN_CLICKED, OnClickedButton)
140 CHAIN_MSG_MAP(CompleteWnd)
141 END_MSG_MAP()
142
143 private:
144 // Message and command handlers.
145 LRESULT OnInitDialog(UINT msg, WPARAM wparam, LPARAM lparam, BOOL& handled); // NOLINT
146 LRESULT OnInstallStopped(UINT msg,
147 WPARAM wparam,
148 LPARAM lparam,
149 BOOL& handled); // NOLINT
150 LRESULT OnClickedButton(WORD notify_code,
151 WORD id,
152 HWND wnd_ctl,
153 BOOL& handled); // NOLINT
154
155 // Handles requests to close the window. Returns true if the window is closed.
156 virtual bool MaybeCloseWindow();
157
158 // Helpers.
159 HRESULT LaunchCmdLine(const AppCompletionInfo& app_info);
160 bool LaunchCmdLines(const ObserverCompletionInfo& info);
161 HRESULT ChangeControlState();
162 HRESULT SetMarqueeMode(bool is_marquee);
163
164 bool IsInstallStoppedWindowPresent();
165
166 void HandleCancelRequest();
167
168 // Closes the Installation Stopped window if present. Returns true if closed.
169 bool CloseInstallStoppedWindow();
170
171 void DeterminePostInstallUrls(const ObserverCompletionInfo& info);
172 CompletionCodes GetBundleOverallCompletionCode(
173 const ObserverCompletionInfo& info) const;
174
175 // TODO(omaha3): These states are used to control the UI elements. Otherwise,
176 // we could have just a single "complete" state and track restart/reboot state
177 // separately.
178 // The states are used as indexes in zero-based arrays so they should
179 // start at 0.
180 enum States {
181 STATE_INIT = 0,
182 STATE_CHECKING_FOR_UPDATE,
183 STATE_WAITING_TO_DOWNLOAD,
184 STATE_DOWNLOADING,
185 STATE_WAITING_TO_INSTALL,
186 STATE_INSTALLING,
187 STATE_PAUSED,
188 STATE_COMPLETE_SUCCESS,
189 STATE_COMPLETE_ERROR,
190 // TODO(omaha): Collapse these two into one state. Controls are the same.
191 // Add another variable to remember what to do in this state.
192 STATE_COMPLETE_RESTART_BROWSER,
193 STATE_COMPLETE_RESTART_ALL_BROWSERS,
194 STATE_COMPLETE_REBOOT,
195 STATE_END,
196 };
197
198 scoped_ptr<HighresTimer> metrics_timer_;
199
200 // Due to a repaint issue in StaticEx we prefer to manage their lifetime
201 // very aggressively so we contain them by reference instead of value.
202 scoped_ptr<StaticEx> pause_resume_text_;
203
204 States cur_state_;
205
206 scoped_ptr<InstallStoppedWnd> install_stopped_wnd_;
207
208 ProgressWndEvents* events_sink_;
209 std::vector<CString> post_install_urls_;
210 bool is_canceled_;
211
212 #pragma warning(disable : 4510 4610)
213 // C4510: default constructor could not be generated
214 // C4610: struct can never be instantiated - user defined constructor required
215 struct ControlState {
216 const int id_;
217 const ControlAttributes attr_[ProgressWnd::STATE_END + 1];
218 };
219 #pragma warning(default : 4510 4610)
220
221 static const ControlState ctls_[];
222
223 // The speed by which the progress bar moves in marquee mode.
224 static const int kMarqueeModeUpdatesMs = 75;
225
226 friend class UITest;
227 DISALLOW_EVIL_CONSTRUCTORS(ProgressWnd);
228 };
229
230 } // namespace omaha
231
232 #endif // OMAHA_UI_PROGRESS_WND_H_
233
OLDNEW
« no previous file with comments | « ui/complete_wnd.cc ('k') | ui/progress_wnd.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698