172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file.
472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/remoting/remoting_options_handler.h"
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/utf_string_conversions.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/pref_service.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/service/service_process_control_manager.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/pref_names.h"
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/remoting/chromoting_host_info.h"
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/webui/web_ui.h"
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "grit/generated_resources.h"
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace remoting {
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenRemotingOptionsHandler::RemotingOptionsHandler()
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    : web_ui_(NULL),
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      process_control_(NULL) {
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenRemotingOptionsHandler::~RemotingOptionsHandler() {
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  if (process_control_)
2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    process_control_->RemoveMessageHandler(this);
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid RemotingOptionsHandler::Init(WebUI* web_ui) {
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  web_ui_ = web_ui;
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  process_control_ =
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ServiceProcessControlManager::GetInstance()->GetProcessControl(
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          web_ui_->GetProfile());
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  process_control_->AddMessageHandler(this);
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  if (!process_control_->RequestRemotingHostStatus()) {
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Assume that host is not started if we can't request status.
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    SetStatus(false, "");
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->GetProfile()->GetPrefs()->SetBoolean(
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      prefs::kRemotingHasSetupCompleted, false);
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// ServiceProcessControl::MessageHandler interface
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid RemotingOptionsHandler::OnRemotingHostInfo(
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    const remoting::ChromotingHostInfo& host_info) {
4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SetStatus(host_info.enabled, host_info.login);
5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid RemotingOptionsHandler::SetStatus(
5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    bool enabled, const std::string& login) {
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  string16 status;
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  if (enabled) {
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    status = l10n_util::GetStringFUTF16(IDS_REMOTING_STATUS_ENABLED_TEXT,
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                        UTF8ToUTF16(login));
5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  } else {
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    status = l10n_util::GetStringUTF16(IDS_REMOTING_STATUS_DISABLED_TEXT);
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  FundamentalValue enabled_value(enabled);
6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  StringValue status_value(status);
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_ui_->CallJavascriptFunction("options.AdvancedOptions.SetRemotingStatus",
6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                  enabled_value, status_value);
6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace remoting
69