OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/memory/weak_ptr.h" | 5 #include "base/memory/weak_ptr.h" |
6 #include "base/strings/string16.h" | 6 #include "base/strings/string16.h" |
7 #include "base/task_runner_util.h" | |
7 #include "base/win/win_util.h" | 8 #include "base/win/win_util.h" |
8 #include "base/win/windows_version.h" | 9 #include "base/win/windows_version.h" |
9 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
10 #include "chrome/browser/first_run/upgrade_util_win.h" | 11 #include "chrome/browser/first_run/upgrade_util.h" |
11 #include "chrome/browser/google/google_update_win.h" | 12 #include "chrome/browser/google/google_update_win.h" |
12 #include "chrome/browser/lifetime/application_lifetime.h" | 13 #include "chrome/browser/lifetime/application_lifetime.h" |
13 #include "chrome/browser/ui/webui/help/version_updater.h" | 14 #include "chrome/browser/ui/webui/help/version_updater.h" |
14 #include "chrome/grit/generated_resources.h" | 15 #include "chrome/grit/generated_resources.h" |
15 #include "content/public/browser/browser_thread.h" | 16 #include "content/public/browser/browser_thread.h" |
16 #include "content/public/browser/web_contents.h" | 17 #include "content/public/browser/web_contents.h" |
17 #include "ui/aura/window.h" | 18 #include "ui/aura/window.h" |
18 #include "ui/aura/window_tree_host.h" | 19 #include "ui/aura/window_tree_host.h" |
19 #include "ui/base/l10n/l10n_util.h" | 20 #include "ui/base/l10n/l10n_util.h" |
20 #include "ui/gfx/native_widget_types.h" | 21 #include "ui/gfx/native_widget_types.h" |
(...skipping 21 matching lines...) Expand all Loading... | |
42 void OnUpgradeComplete(const base::string16& new_version) override; | 43 void OnUpgradeComplete(const base::string16& new_version) override; |
43 void OnError(GoogleUpdateErrorCode error_code, | 44 void OnError(GoogleUpdateErrorCode error_code, |
44 const base::string16& error_message, | 45 const base::string16& error_message, |
45 const base::string16& new_version) override; | 46 const base::string16& new_version) override; |
46 | 47 |
47 private: | 48 private: |
48 #if defined(GOOGLE_CHROME_BUILD) | 49 #if defined(GOOGLE_CHROME_BUILD) |
49 void BeginUpdateCheckOnFileThread(bool install_update_if_possible); | 50 void BeginUpdateCheckOnFileThread(bool install_update_if_possible); |
50 #endif // GOOGLE_CHROME_BUILD | 51 #endif // GOOGLE_CHROME_BUILD |
51 | 52 |
53 // A task run on the UI thread with the result of checking for a pending | |
54 // restart. | |
55 void OnPendingRestartCheck(bool is_update_pending_restart); | |
56 | |
52 // The widget owning the UI for the update check. | 57 // The widget owning the UI for the update check. |
53 gfx::AcceleratedWidget owner_widget_; | 58 gfx::AcceleratedWidget owner_widget_; |
54 | 59 |
55 // Callback used to communicate update status to the client. | 60 // Callback used to communicate update status to the client. |
56 StatusCallback callback_; | 61 StatusCallback callback_; |
57 | 62 |
58 // Used for callbacks. | 63 // Used for callbacks. |
59 base::WeakPtrFactory<VersionUpdaterWin> weak_factory_; | 64 base::WeakPtrFactory<VersionUpdaterWin> weak_factory_; |
60 | 65 |
61 DISALLOW_COPY_AND_ASSIGN(VersionUpdaterWin); | 66 DISALLOW_COPY_AND_ASSIGN(VersionUpdaterWin); |
(...skipping 30 matching lines...) Expand all Loading... | |
92 } | 97 } |
93 | 98 |
94 void VersionUpdaterWin::OnUpdateCheckComplete( | 99 void VersionUpdaterWin::OnUpdateCheckComplete( |
95 const base::string16& new_version) { | 100 const base::string16& new_version) { |
96 #if defined(GOOGLE_CHROME_BUILD) | 101 #if defined(GOOGLE_CHROME_BUILD) |
97 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 102 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
98 Status status = CHECKING; | 103 Status status = CHECKING; |
99 if (new_version.empty()) { | 104 if (new_version.empty()) { |
100 // Google Update says that no new version is available. Check to see if a | 105 // Google Update says that no new version is available. Check to see if a |
101 // restart is needed for a previously-applied update to take effect. | 106 // restart is needed for a previously-applied update to take effect. |
102 status = upgrade_util::IsRunningOldChrome() ? NEARLY_UPDATED : UPDATED; | 107 if (base::PostTaskAndReplyWithResult( |
Peter Kasting
2015/05/15 18:58:18
If this conditional fails, we'll run the callback
grt (UTC plus 2)
2015/05/15 19:57:16
This condition will only fail when Chrome is shutt
| |
108 content::BrowserThread::GetBlockingPool(), | |
109 FROM_HERE, | |
110 base::Bind(&upgrade_util::IsUpdatePendingRestart), | |
111 base::Bind(&VersionUpdaterWin::OnPendingRestartCheck, | |
112 weak_factory_.GetWeakPtr()))) { | |
113 // Early exit since callback_ will be Run in OnPendingRestartCheck. | |
114 return; | |
115 } | |
103 } else { | 116 } else { |
104 // Notify the caller that the update is now beginning and initiate it. | 117 // Notify the caller that the update is now beginning and initiate it. |
105 status = UPDATING; | 118 status = UPDATING; |
106 BeginUpdateCheckOnFileThread(true /* install_update_if_possible */); | 119 BeginUpdateCheckOnFileThread(true /* install_update_if_possible */); |
107 } | 120 } |
108 callback_.Run(status, 0, base::string16()); | 121 callback_.Run(status, 0, base::string16()); |
109 #endif // GOOGLE_CHROME_BUILD | 122 #endif // GOOGLE_CHROME_BUILD |
110 } | 123 } |
111 | 124 |
112 void VersionUpdaterWin::OnUpgradeProgress(int progress, | 125 void VersionUpdaterWin::OnUpgradeProgress(int progress, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
149 void VersionUpdaterWin::BeginUpdateCheckOnFileThread( | 162 void VersionUpdaterWin::BeginUpdateCheckOnFileThread( |
150 bool install_update_if_possible) { | 163 bool install_update_if_possible) { |
151 BeginUpdateCheck(content::BrowserThread::GetMessageLoopProxyForThread( | 164 BeginUpdateCheck(content::BrowserThread::GetMessageLoopProxyForThread( |
152 content::BrowserThread::FILE), | 165 content::BrowserThread::FILE), |
153 g_browser_process->GetApplicationLocale(), | 166 g_browser_process->GetApplicationLocale(), |
154 install_update_if_possible, owner_widget_, | 167 install_update_if_possible, owner_widget_, |
155 weak_factory_.GetWeakPtr()); | 168 weak_factory_.GetWeakPtr()); |
156 } | 169 } |
157 #endif // GOOGLE_CHROME_BUILD | 170 #endif // GOOGLE_CHROME_BUILD |
158 | 171 |
172 void VersionUpdaterWin::OnPendingRestartCheck(bool is_update_pending_restart) { | |
173 callback_.Run(is_update_pending_restart ? NEARLY_UPDATED : UPDATED, 0, | |
174 base::string16()); | |
175 } | |
176 | |
159 } // namespace | 177 } // namespace |
160 | 178 |
161 VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) { | 179 VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) { |
162 // Retrieve the HWND for the browser window that is hosting the update check. | 180 // Retrieve the HWND for the browser window that is hosting the update check. |
163 // This will be used as the parent for a UAC prompt, if needed. It's possible | 181 // This will be used as the parent for a UAC prompt, if needed. It's possible |
164 // this this window will no longer have focus by the time UAC is needed. In | 182 // this this window will no longer have focus by the time UAC is needed. In |
165 // that case, the UAC prompt will appear in the taskbar and will require a | 183 // that case, the UAC prompt will appear in the taskbar and will require a |
166 // user click. This is the least surprising thing we can do for the user, and | 184 // user click. This is the least surprising thing we can do for the user, and |
167 // is the intended behavior for Windows applications. It's also possible that | 185 // is the intended behavior for Windows applications. It's also possible that |
168 // the browser window hosting the update check will have been closed by the | 186 // the browser window hosting the update check will have been closed by the |
169 // time the UAC prompt is needed. This will behave similarly. | 187 // time the UAC prompt is needed. This will behave similarly. |
170 return new VersionUpdaterWin(web_contents->GetTopLevelNativeWindow() | 188 return new VersionUpdaterWin(web_contents->GetTopLevelNativeWindow() |
171 ->GetHost() | 189 ->GetHost() |
172 ->GetAcceleratedWidget()); | 190 ->GetAcceleratedWidget()); |
173 } | 191 } |
OLD | NEW |