OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/ui/webui/options/chromeos/about_page_handler.h" | 5 #include "chrome/browser/ui/webui/options/chromeos/about_page_handler.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/i18n/time_formatting.h" | 13 #include "base/i18n/time_formatting.h" |
14 #include "base/string16.h" | 14 #include "base/string16.h" |
15 #include "base/string_number_conversions.h" | 15 #include "base/string_number_conversions.h" |
16 #include "base/time.h" | 16 #include "base/time.h" |
17 #include "base/utf_string_conversions.h" | 17 #include "base/utf_string_conversions.h" |
18 #include "base/values.h" | 18 #include "base/values.h" |
19 #include "chrome/browser/chromeos/cros/cros_library.h" | |
20 #include "chrome/browser/chromeos/cros/update_library.h" | |
21 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" | 19 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" |
22 #include "chrome/browser/chromeos/dbus/power_manager_client.h" | 20 #include "chrome/browser/chromeos/dbus/power_manager_client.h" |
| 21 #include "chrome/browser/chromeos/dbus/update_engine_client.h" |
23 #include "chrome/browser/chromeos/login/user_manager.h" | 22 #include "chrome/browser/chromeos/login/user_manager.h" |
24 #include "chrome/browser/chromeos/login/wizard_controller.h" | 23 #include "chrome/browser/chromeos/login/wizard_controller.h" |
25 #include "chrome/browser/chromeos/user_cros_settings_provider.h" | 24 #include "chrome/browser/chromeos/user_cros_settings_provider.h" |
26 #include "chrome/browser/google/google_util.h" | 25 #include "chrome/browser/google/google_util.h" |
27 #include "chrome/common/chrome_version_info.h" | 26 #include "chrome/common/chrome_version_info.h" |
28 #include "chrome/common/url_constants.h" | 27 #include "chrome/common/url_constants.h" |
29 #include "content/public/common/content_client.h" | 28 #include "content/public/common/content_client.h" |
30 #include "googleurl/src/gurl.h" | 29 #include "googleurl/src/gurl.h" |
31 #include "grit/chromium_strings.h" | 30 #include "grit/chromium_strings.h" |
32 #include "grit/generated_resources.h" | 31 #include "grit/generated_resources.h" |
(...skipping 24 matching lines...) Expand all Loading... |
57 size_t end) { | 56 size_t end) { |
58 DCHECK(end > start); | 57 DCHECK(end > start); |
59 return text.substr(start, end - start); | 58 return text.substr(start, end - start); |
60 } | 59 } |
61 | 60 |
62 } // namespace | 61 } // namespace |
63 | 62 |
64 namespace chromeos { | 63 namespace chromeos { |
65 | 64 |
66 class AboutPageHandler::UpdateObserver | 65 class AboutPageHandler::UpdateObserver |
67 : public UpdateLibrary::Observer { | 66 : public UpdateEngineClient::Observer { |
68 public: | 67 public: |
69 explicit UpdateObserver(AboutPageHandler* handler) : page_handler_(handler) {} | 68 explicit UpdateObserver(AboutPageHandler* handler) : page_handler_(handler) {} |
70 virtual ~UpdateObserver() {} | 69 virtual ~UpdateObserver() {} |
71 | 70 |
72 AboutPageHandler* page_handler() const { return page_handler_; } | 71 AboutPageHandler* page_handler() const { return page_handler_; } |
73 | 72 |
74 private: | 73 private: |
75 virtual void UpdateStatusChanged(const UpdateLibrary::Status& status) { | 74 virtual void UpdateStatusChanged( |
| 75 const UpdateEngineClient::Status& status) OVERRIDE { |
76 page_handler_->UpdateStatus(status); | 76 page_handler_->UpdateStatus(status); |
77 } | 77 } |
78 | 78 |
79 AboutPageHandler* page_handler_; | 79 AboutPageHandler* page_handler_; |
80 | 80 |
81 DISALLOW_COPY_AND_ASSIGN(UpdateObserver); | 81 DISALLOW_COPY_AND_ASSIGN(UpdateObserver); |
82 }; | 82 }; |
83 | 83 |
84 AboutPageHandler::AboutPageHandler() | 84 AboutPageHandler::AboutPageHandler() |
85 : CrosOptionsPageUIHandler( | 85 : CrosOptionsPageUIHandler( |
86 new UserCrosSettingsProvider), | 86 new UserCrosSettingsProvider), |
87 progress_(-1), | 87 progress_(-1), |
88 sticky_(false), | 88 sticky_(false), |
89 started_(false) | 89 started_(false) |
90 {} | 90 {} |
91 | 91 |
92 AboutPageHandler::~AboutPageHandler() { | 92 AboutPageHandler::~AboutPageHandler() { |
93 if (update_observer_.get()) { | 93 if (update_observer_.get()) { |
94 CrosLibrary::Get()->GetUpdateLibrary()-> | 94 DBusThreadManager::Get()->GetUpdateEngineClient()-> |
95 RemoveObserver(update_observer_.get()); | 95 RemoveObserver(update_observer_.get()); |
96 } | 96 } |
97 } | 97 } |
98 | 98 |
99 void AboutPageHandler::GetLocalizedValues(DictionaryValue* localized_strings) { | 99 void AboutPageHandler::GetLocalizedValues(DictionaryValue* localized_strings) { |
100 DCHECK(localized_strings); | 100 DCHECK(localized_strings); |
101 | 101 |
102 static OptionsStringResource resources[] = { | 102 static OptionsStringResource resources[] = { |
103 { "firmware", IDS_ABOUT_PAGE_FIRMWARE }, | 103 { "firmware", IDS_ABOUT_PAGE_FIRMWARE }, |
104 { "product", IDS_PRODUCT_OS_NAME }, | 104 { "product", IDS_PRODUCT_OS_NAME }, |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 void AboutPageHandler::PageReady(const ListValue* args) { | 251 void AboutPageHandler::PageReady(const ListValue* args) { |
252 // Version information is loaded from a callback | 252 // Version information is loaded from a callback |
253 loader_.GetVersion(&consumer_, | 253 loader_.GetVersion(&consumer_, |
254 base::Bind(&AboutPageHandler::OnOSVersion, | 254 base::Bind(&AboutPageHandler::OnOSVersion, |
255 base::Unretained(this)), | 255 base::Unretained(this)), |
256 VersionLoader::VERSION_FULL); | 256 VersionLoader::VERSION_FULL); |
257 loader_.GetFirmware(&consumer_, | 257 loader_.GetFirmware(&consumer_, |
258 base::Bind(&AboutPageHandler::OnOSFirmware, | 258 base::Bind(&AboutPageHandler::OnOSFirmware, |
259 base::Unretained(this))); | 259 base::Unretained(this))); |
260 | 260 |
261 UpdateLibrary* update_library = | 261 UpdateEngineClient* update_engine_client = |
262 CrosLibrary::Get()->GetUpdateLibrary(); | 262 DBusThreadManager::Get()->GetUpdateEngineClient(); |
263 | 263 |
264 update_observer_.reset(new UpdateObserver(this)); | 264 update_observer_.reset(new UpdateObserver(this)); |
265 update_library->AddObserver(update_observer_.get()); | 265 update_engine_client->AddObserver(update_observer_.get()); |
266 | 266 |
267 // Update the WebUI page with the current status. See comments below. | 267 // Update the WebUI page with the current status. See comments below. |
268 UpdateStatus(update_library->status()); | 268 UpdateStatus(update_engine_client->GetLastStatus()); |
269 | 269 |
270 // Initiate update check. UpdateStatus() below will be called when we | 270 // Initiate update check. UpdateStatus() below will be called when we |
271 // get update status via update_observer_. If the update has been | 271 // get update status via update_observer_. If the update has been |
272 // already complete, update_observer_ won't receive a notification. | 272 // already complete, update_observer_ won't receive a notification. |
273 // This is why we manually update the WebUI page above. | 273 // This is why we manually update the WebUI page above. |
274 CheckNow(NULL); | 274 CheckNow(NULL); |
275 | 275 |
276 // Request the channel information. Use the observer to track the about | 276 // Request the channel information. Use the observer to track the about |
277 // page handler and ensure it does not get deleted before the callback. | 277 // page handler and ensure it does not get deleted before the callback. |
278 update_library->GetReleaseTrack(UpdateSelectedChannel, | 278 update_engine_client->GetReleaseTrack( |
279 update_observer_.get()); | 279 base::Bind(UpdateSelectedChannel, update_observer_.get())); |
280 } | 280 } |
281 | 281 |
282 void AboutPageHandler::SetReleaseTrack(const ListValue* args) { | 282 void AboutPageHandler::SetReleaseTrack(const ListValue* args) { |
283 if (!UserManager::Get()->current_user_is_owner()) { | 283 if (!UserManager::Get()->current_user_is_owner()) { |
284 LOG(WARNING) << "Non-owner tried to change release track."; | 284 LOG(WARNING) << "Non-owner tried to change release track."; |
285 return; | 285 return; |
286 } | 286 } |
287 const std::string channel = UTF16ToUTF8(ExtractStringValue(args)); | 287 const std::string channel = UTF16ToUTF8(ExtractStringValue(args)); |
288 CrosLibrary::Get()->GetUpdateLibrary()->SetReleaseTrack(channel); | 288 DBusThreadManager::Get()->GetUpdateEngineClient()->SetReleaseTrack(channel); |
289 } | 289 } |
290 | 290 |
291 void AboutPageHandler::CheckNow(const ListValue* args) { | 291 void AboutPageHandler::CheckNow(const ListValue* args) { |
292 // Make sure that libcros is loaded and OOBE is complete. | 292 // Make sure that libcros is loaded and OOBE is complete. |
293 if (!WizardController::default_controller() || | 293 if (!WizardController::default_controller() || |
294 WizardController::IsDeviceRegistered()) { | 294 WizardController::IsDeviceRegistered()) { |
295 CrosLibrary::Get()->GetUpdateLibrary()-> | 295 DBusThreadManager::Get()->GetUpdateEngineClient()-> |
296 RequestUpdateCheck(NULL, // no callback | 296 RequestUpdateCheck(UpdateEngineClient::EmptyUpdateCheckCallback()); |
297 NULL); // no userdata | |
298 } | 297 } |
299 } | 298 } |
300 | 299 |
301 void AboutPageHandler::RestartNow(const ListValue* args) { | 300 void AboutPageHandler::RestartNow(const ListValue* args) { |
302 DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); | 301 DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); |
303 } | 302 } |
304 | 303 |
305 void AboutPageHandler::UpdateStatus( | 304 void AboutPageHandler::UpdateStatus( |
306 const UpdateLibrary::Status& status) { | 305 const UpdateEngineClient::Status& status) { |
307 string16 message; | 306 string16 message; |
308 std::string image = "up-to-date"; | 307 std::string image = "up-to-date"; |
309 bool enabled = false; | 308 bool enabled = false; |
310 | 309 |
311 switch (status.status) { | 310 switch (status.status) { |
312 case UPDATE_STATUS_IDLE: | 311 case UpdateEngineClient::UPDATE_STATUS_IDLE: |
313 if (!sticky_) { | 312 if (!sticky_) { |
314 message = l10n_util::GetStringFUTF16(IDS_UPGRADE_ALREADY_UP_TO_DATE, | 313 message = l10n_util::GetStringFUTF16(IDS_UPGRADE_ALREADY_UP_TO_DATE, |
315 l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME)); | 314 l10n_util::GetStringUTF16(IDS_PRODUCT_OS_NAME)); |
316 enabled = true; | 315 enabled = true; |
317 } | 316 } |
318 break; | 317 break; |
319 case UPDATE_STATUS_CHECKING_FOR_UPDATE: | 318 case UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE: |
320 message = l10n_util::GetStringUTF16(IDS_UPGRADE_CHECK_STARTED); | 319 message = l10n_util::GetStringUTF16(IDS_UPGRADE_CHECK_STARTED); |
321 sticky_ = false; | 320 sticky_ = false; |
322 break; | 321 break; |
323 case UPDATE_STATUS_UPDATE_AVAILABLE: | 322 case UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE: |
324 message = l10n_util::GetStringUTF16(IDS_UPDATE_AVAILABLE); | 323 message = l10n_util::GetStringUTF16(IDS_UPDATE_AVAILABLE); |
325 started_ = true; | 324 started_ = true; |
326 break; | 325 break; |
327 case UPDATE_STATUS_DOWNLOADING: | 326 case UpdateEngineClient::UPDATE_STATUS_DOWNLOADING: |
328 { | 327 { |
329 int progress = static_cast<int>(status.download_progress * 100.0); | 328 int progress = static_cast<int>(status.download_progress * 100.0); |
330 if (progress != progress_) { | 329 if (progress != progress_) { |
331 progress_ = progress; | 330 progress_ = progress; |
332 message = l10n_util::GetStringFUTF16Int(IDS_UPDATE_DOWNLOADING, | 331 message = l10n_util::GetStringFUTF16Int(IDS_UPDATE_DOWNLOADING, |
333 progress_); | 332 progress_); |
334 } | 333 } |
335 started_ = true; | 334 started_ = true; |
336 } | 335 } |
337 break; | 336 break; |
338 case UPDATE_STATUS_VERIFYING: | 337 case UpdateEngineClient::UPDATE_STATUS_VERIFYING: |
339 message = l10n_util::GetStringUTF16(IDS_UPDATE_VERIFYING); | 338 message = l10n_util::GetStringUTF16(IDS_UPDATE_VERIFYING); |
340 started_ = true; | 339 started_ = true; |
341 break; | 340 break; |
342 case UPDATE_STATUS_FINALIZING: | 341 case UpdateEngineClient::UPDATE_STATUS_FINALIZING: |
343 message = l10n_util::GetStringUTF16(IDS_UPDATE_FINALIZING); | 342 message = l10n_util::GetStringUTF16(IDS_UPDATE_FINALIZING); |
344 started_ = true; | 343 started_ = true; |
345 break; | 344 break; |
346 case UPDATE_STATUS_UPDATED_NEED_REBOOT: | 345 case UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT: |
347 message = l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED); | 346 message = l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED); |
348 image = "available"; | 347 image = "available"; |
349 sticky_ = true; | 348 sticky_ = true; |
350 break; | 349 break; |
351 default: | 350 default: |
352 // case UPDATE_STATUS_ERROR: | 351 // case UpdateEngineClient::UPDATE_STATUS_ERROR: |
353 // case UPDATE_STATUS_REPORTING_ERROR_EVENT: | 352 // case UpdateEngineClient::UPDATE_STATUS_REPORTING_ERROR_EVENT: |
354 | 353 |
355 // The error is only displayed if we were able to determine an | 354 // The error is only displayed if we were able to determine an |
356 // update was available. | 355 // update was available. |
357 if (started_) { | 356 if (started_) { |
358 message = l10n_util::GetStringUTF16(IDS_UPDATE_ERROR); | 357 message = l10n_util::GetStringUTF16(IDS_UPDATE_ERROR); |
359 image = "fail"; | 358 image = "fail"; |
360 enabled = true; | 359 enabled = true; |
361 sticky_ = true; | 360 sticky_ = true; |
362 started_ = false; | 361 started_ = false; |
363 } | 362 } |
364 break; | 363 break; |
365 } | 364 } |
366 if (message.size()) { | 365 if (message.size()) { |
367 scoped_ptr<Value> update_message(Value::CreateStringValue(message)); | 366 scoped_ptr<Value> update_message(Value::CreateStringValue(message)); |
368 // "Checking for update..." needs to be shown for a while, so users | 367 // "Checking for update..." needs to be shown for a while, so users |
369 // can read it, hence insert delay for this. | 368 // can read it, hence insert delay for this. |
370 scoped_ptr<Value> insert_delay(Value::CreateBooleanValue( | 369 scoped_ptr<Value> insert_delay(Value::CreateBooleanValue( |
371 status.status == UPDATE_STATUS_CHECKING_FOR_UPDATE)); | 370 status.status == |
| 371 UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE)); |
372 web_ui_->CallJavascriptFunction("AboutPage.updateStatusCallback", | 372 web_ui_->CallJavascriptFunction("AboutPage.updateStatusCallback", |
373 *update_message, *insert_delay); | 373 *update_message, *insert_delay); |
374 | 374 |
375 scoped_ptr<Value> enabled_value(Value::CreateBooleanValue(enabled)); | 375 scoped_ptr<Value> enabled_value(Value::CreateBooleanValue(enabled)); |
376 web_ui_->CallJavascriptFunction("AboutPage.updateEnableCallback", | 376 web_ui_->CallJavascriptFunction("AboutPage.updateEnableCallback", |
377 *enabled_value); | 377 *enabled_value); |
378 | 378 |
379 scoped_ptr<Value> image_string(Value::CreateStringValue(image)); | 379 scoped_ptr<Value> image_string(Value::CreateStringValue(image)); |
380 web_ui_->CallJavascriptFunction("AboutPage.setUpdateImage", | 380 web_ui_->CallJavascriptFunction("AboutPage.setUpdateImage", |
381 *image_string); | 381 *image_string); |
382 } | 382 } |
383 // We'll change the "Check For Update" button to "Restart" button. | 383 // We'll change the "Check For Update" button to "Restart" button. |
384 if (status.status == UPDATE_STATUS_UPDATED_NEED_REBOOT) { | 384 if (status.status == UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT) { |
385 web_ui_->CallJavascriptFunction("AboutPage.changeToRestartButton"); | 385 web_ui_->CallJavascriptFunction("AboutPage.changeToRestartButton"); |
386 } | 386 } |
387 } | 387 } |
388 | 388 |
389 void AboutPageHandler::OnOSVersion(VersionLoader::Handle handle, | 389 void AboutPageHandler::OnOSVersion(VersionLoader::Handle handle, |
390 std::string version) { | 390 std::string version) { |
391 if (version.size()) { | 391 if (version.size()) { |
392 scoped_ptr<Value> version_string(Value::CreateStringValue(version)); | 392 scoped_ptr<Value> version_string(Value::CreateStringValue(version)); |
393 web_ui_->CallJavascriptFunction("AboutPage.updateOSVersionCallback", | 393 web_ui_->CallJavascriptFunction("AboutPage.updateOSVersionCallback", |
394 *version_string); | 394 *version_string); |
395 } | 395 } |
396 } | 396 } |
397 | 397 |
398 void AboutPageHandler::OnOSFirmware(VersionLoader::Handle handle, | 398 void AboutPageHandler::OnOSFirmware(VersionLoader::Handle handle, |
399 std::string firmware) { | 399 std::string firmware) { |
400 if (firmware.size()) { | 400 if (firmware.size()) { |
401 scoped_ptr<Value> firmware_string(Value::CreateStringValue(firmware)); | 401 scoped_ptr<Value> firmware_string(Value::CreateStringValue(firmware)); |
402 web_ui_->CallJavascriptFunction("AboutPage.updateOSFirmwareCallback", | 402 web_ui_->CallJavascriptFunction("AboutPage.updateOSFirmwareCallback", |
403 *firmware_string); | 403 *firmware_string); |
404 } | 404 } |
405 } | 405 } |
406 | 406 |
407 // Callback from UpdateEngine with channel information. | 407 // Callback from UpdateEngine with channel information. |
408 // static | 408 // static |
409 void AboutPageHandler::UpdateSelectedChannel(void* user_data, | 409 void AboutPageHandler::UpdateSelectedChannel(UpdateObserver* observer, |
410 const char* channel) { | 410 const std::string& channel) { |
411 if (!user_data || !channel) { | 411 if (DBusThreadManager::Get()->GetUpdateEngineClient() |
412 LOG(WARNING) << "UpdateSelectedChannel returned NULL."; | 412 ->HasObserver(observer)) { |
413 return; | 413 // If UpdateEngineClient still has the observer, then the page handler |
414 } | 414 // is valid. |
415 UpdateObserver* observer = static_cast<UpdateObserver*>(user_data); | |
416 if (CrosLibrary::Get()->GetUpdateLibrary()->HasObserver(observer)) { | |
417 // If UpdateLibrary still has the observer, then the page handler is valid. | |
418 AboutPageHandler* handler = observer->page_handler(); | 415 AboutPageHandler* handler = observer->page_handler(); |
419 scoped_ptr<Value> channel_string(Value::CreateStringValue(channel)); | 416 scoped_ptr<Value> channel_string(Value::CreateStringValue(channel)); |
420 handler->web_ui_->CallJavascriptFunction( | 417 handler->web_ui_->CallJavascriptFunction( |
421 "AboutPage.updateSelectedOptionCallback", *channel_string); | 418 "AboutPage.updateSelectedOptionCallback", *channel_string); |
422 } | 419 } |
423 } | 420 } |
424 | 421 |
425 } // namespace chromeos | 422 } // namespace chromeos |
OLD | NEW |