普通文本  |  69行  |  2.17 KB

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/remoting/remoting_options_handler.h"

#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/service/service_process_control_manager.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/remoting/chromoting_host_info.h"
#include "content/browser/webui/web_ui.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"

namespace remoting {

RemotingOptionsHandler::RemotingOptionsHandler()
    : web_ui_(NULL),
      process_control_(NULL) {
}

RemotingOptionsHandler::~RemotingOptionsHandler() {
  if (process_control_)
    process_control_->RemoveMessageHandler(this);
}

void RemotingOptionsHandler::Init(WebUI* web_ui) {
  web_ui_ = web_ui;

  process_control_ =
      ServiceProcessControlManager::GetInstance()->GetProcessControl(
          web_ui_->GetProfile());
  process_control_->AddMessageHandler(this);

  if (!process_control_->RequestRemotingHostStatus()) {
    // Assume that host is not started if we can't request status.
    SetStatus(false, "");
  }
  web_ui_->GetProfile()->GetPrefs()->SetBoolean(
      prefs::kRemotingHasSetupCompleted, false);
}

// ServiceProcessControl::MessageHandler interface
void RemotingOptionsHandler::OnRemotingHostInfo(
    const remoting::ChromotingHostInfo& host_info) {
  SetStatus(host_info.enabled, host_info.login);
}

void RemotingOptionsHandler::SetStatus(
    bool enabled, const std::string& login) {
  string16 status;
  if (enabled) {
    status = l10n_util::GetStringFUTF16(IDS_REMOTING_STATUS_ENABLED_TEXT,
                                        UTF8ToUTF16(login));
  } else {
    status = l10n_util::GetStringUTF16(IDS_REMOTING_STATUS_DISABLED_TEXT);
  }

  FundamentalValue enabled_value(enabled);
  StringValue status_value(status);
  web_ui_->CallJavascriptFunction("options.AdvancedOptions.SetRemotingStatus",
                                  enabled_value, status_value);
}

}  // namespace remoting