15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/test_license_server.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/file_util.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/process/kill.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/process/launch.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/media/test_license_server_config.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TestLicenseServer::TestLicenseServer( 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TestLicenseServerConfig> server_config) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : server_config_(server_config.Pass()), 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) license_server_process_(base::kNullProcessHandle) { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TestLicenseServer::~TestLicenseServer() { 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Stop(); 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool TestLicenseServer::Start() { 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (license_server_process_ != base::kNullProcessHandle) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!server_config_->IsPlatformSupported()) { 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(0) << "License server is not supported on current platform."; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!server_config_->GetServerCommandLine(&command_line)) { 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VLOG(0) << "Could not get server command line to launch."; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(0) << "Starting test license server " << 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) command_line.GetCommandLineString(); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!base::LaunchProcess(command_line, base::LaunchOptions(), 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &license_server_process_)) { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(0) << "Failed to start test license server!"; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK_NE(license_server_process_, base::kNullProcessHandle); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool TestLicenseServer::Stop() { 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (license_server_process_ == base::kNullProcessHandle) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(0) << "Killing license server."; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool kill_succeeded = base::KillProcess(license_server_process_, 1, true); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (kill_succeeded) { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::CloseProcessHandle(license_server_process_); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) license_server_process_ = base::kNullProcessHandle; 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VLOG(1) << "Kill failed?!"; 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return kill_succeeded; 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string TestLicenseServer::GetServerURL() { 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return server_config_->GetServerURL(); 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 68