1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/media/test_license_server.h" 6 7#include "base/command_line.h" 8#include "base/file_util.h" 9#include "base/process/kill.h" 10#include "base/process/launch.h" 11#include "chrome/browser/media/test_license_server_config.h" 12 13 14TestLicenseServer::TestLicenseServer( 15 scoped_ptr<TestLicenseServerConfig> server_config) 16 : server_config_(server_config.Pass()), 17 license_server_process_(base::kNullProcessHandle) { 18} 19 20TestLicenseServer::~TestLicenseServer() { 21 Stop(); 22} 23 24bool TestLicenseServer::Start() { 25 if (license_server_process_ != base::kNullProcessHandle) 26 return true; 27 28 if (!server_config_->IsPlatformSupported()) { 29 VLOG(0) << "License server is not supported on current platform."; 30 return false; 31 } 32 33 CommandLine command_line(CommandLine::NO_PROGRAM); 34 if (!server_config_->GetServerCommandLine(&command_line)) { 35 VLOG(0) << "Could not get server command line to launch."; 36 return false; 37 } 38 39 VLOG(0) << "Starting test license server " << 40 command_line.GetCommandLineString(); 41 if (!base::LaunchProcess(command_line, base::LaunchOptions(), 42 &license_server_process_)) { 43 VLOG(0) << "Failed to start test license server!"; 44 return false; 45 } 46 DCHECK_NE(license_server_process_, base::kNullProcessHandle); 47 return true; 48} 49 50bool TestLicenseServer::Stop() { 51 if (license_server_process_ == base::kNullProcessHandle) 52 return true; 53 VLOG(0) << "Killing license server."; 54 bool kill_succeeded = base::KillProcess(license_server_process_, 1, true); 55 56 if (kill_succeeded) { 57 base::CloseProcessHandle(license_server_process_); 58 license_server_process_ = base::kNullProcessHandle; 59 } else { 60 VLOG(1) << "Kill failed?!"; 61 } 62 return kill_succeeded; 63} 64 65std::string TestLicenseServer::GetServerURL() { 66 return server_config_->GetServerURL(); 67} 68