// Copyright 2015 The Chromium OS 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 "debugd/src/session_manager_proxy.h"

#include <base/bind.h>
#include <base/logging.h>
#include <chromeos/dbus/service_constants.h>
#include <dbus/message.h>
#include <dbus/object_proxy.h>

namespace {

void OnSignalConnected(const std::string& interface,
                       const std::string& signal,
                       bool success) {
  if (!success) {
    LOG(ERROR) << "Could not connect to signal " << signal
               << " on interface " << interface;
  }
}

}  // namespace

namespace debugd {

SessionManagerProxy::SessionManagerProxy(scoped_refptr<dbus::Bus> bus)
    : bus_(bus),
      proxy_(bus->GetObjectProxy(
        login_manager::kSessionManagerServiceName,
        dbus::ObjectPath(login_manager::kSessionManagerServicePath))),
      weak_ptr_factory_(this) {
  proxy_->ConnectToSignal(
      login_manager::kSessionManagerInterface,
      login_manager::kLoginPromptVisibleSignal,
      base::Bind(&SessionManagerProxy::OnLoginPromptVisible,
                 weak_ptr_factory_.GetWeakPtr()),
      base::Bind(&OnSignalConnected));
}


void SessionManagerProxy::OnLoginPromptVisible(dbus::Signal*) {
  // Try to enable Chrome remote debugging again on Login prompt.
  // Theoretically it should already be enabled during debugd Init().  But
  // There might be a timing issue if debugd started too fast.  We try again
  // here if the first attempt in Init() failed.
  EnableChromeRemoteDebuggingInternal();
}

void SessionManagerProxy::EnableChromeRemoteDebugging() {
  VLOG(1) << "Enable Chrome remote debugging: "
          << should_enable_chrome_remote_debugging_
          << " "
          << is_chrome_remote_debugging_enabled_;
  should_enable_chrome_remote_debugging_ = true;
  EnableChromeRemoteDebuggingInternal();
}

void SessionManagerProxy::EnableChromeRemoteDebuggingInternal() {
  VLOG(1) << "Enable Chrome remote debugging internal: "
          << should_enable_chrome_remote_debugging_
          << " "
          << is_chrome_remote_debugging_enabled_;
  if (!should_enable_chrome_remote_debugging_ ||
      is_chrome_remote_debugging_enabled_) {
    return;
  }

  dbus::MethodCall method_call(
      login_manager::kSessionManagerInterface,
      login_manager::kSessionManagerEnableChromeTesting);
  dbus::MessageWriter writer(&method_call);
  writer.AppendBool(true);  // force_restart
  writer.AppendArrayOfStrings({"--remote-debugging-port=9222"});
  writer.AppendArrayOfStrings({});  // extra_environment_variables
  if (proxy_->CallMethodAndBlock(&method_call,
                                 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)) {
    is_chrome_remote_debugging_enabled_ = true;
  } else {
    LOG(ERROR) << "Failed to enable Chrome remote debugging";
  }
}

}  // namespace debugd
