// Copyright 2014 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 "extensions/browser/test_runtime_api_delegate.h"

#include "extensions/common/api/runtime.h"

namespace extensions {

using api::runtime::PlatformInfo;

TestRuntimeAPIDelegate::TestRuntimeAPIDelegate() {
}

TestRuntimeAPIDelegate::~TestRuntimeAPIDelegate() {
}

void TestRuntimeAPIDelegate::AddUpdateObserver(UpdateObserver* observer) {
}

void TestRuntimeAPIDelegate::RemoveUpdateObserver(UpdateObserver* observer) {
}

void TestRuntimeAPIDelegate::ReloadExtension(const std::string& extension_id) {
}

bool TestRuntimeAPIDelegate::CheckForUpdates(
    const std::string& extension_id,
    const UpdateCheckCallback& callback) {
  return false;
}

void TestRuntimeAPIDelegate::OpenURL(const GURL& uninstall_url) {
}

bool TestRuntimeAPIDelegate::GetPlatformInfo(PlatformInfo* info) {
  // TODO(rockot): This probably isn't right. Maybe this delegate should just
  // support manual PlatformInfo override for tests if necessary.
  info->os = api::runtime::PLATFORM_OS_CROS;
  return true;
}

bool TestRuntimeAPIDelegate::RestartDevice(std::string* error_message) {
  return false;
}

}  // namespace extensions
