| Index: base/test/test_launcher.h | 
| diff --git a/base/test/test_launcher.h b/base/test/test_launcher.h | 
| index 720c74c2ca10a669f4308b2a26f91736abcf0315..866b7720cc51ce0ef82d1724cd9209ffd62cc95b 100644 | 
| --- a/base/test/test_launcher.h | 
| +++ b/base/test/test_launcher.h | 
| @@ -5,8 +5,12 @@ | 
| #ifndef BASE_TEST_TEST_LAUNCHER_H_ | 
| #define BASE_TEST_TEST_LAUNCHER_H_ | 
|  | 
| +#include <string> | 
| + | 
| #include "base/basictypes.h" | 
| +#include "base/callback_forward.h" | 
| #include "base/compiler_specific.h" | 
| +#include "base/time.h" | 
|  | 
| namespace testing { | 
| class TestCase; | 
| @@ -22,6 +26,23 @@ extern const char kGTestRepeatFlag[]; | 
| extern const char kGTestRunDisabledTestsFlag[]; | 
| extern const char kGTestOutputFlag[]; | 
|  | 
| +// Structure containing result of a single test. | 
| +struct TestResult { | 
| +  TestResult(); | 
| + | 
| +  // Name of the test case (before the dot, e.g. "A" for test "A.B"). | 
| +  std::string test_case_name; | 
| + | 
| +  // Name of the test (after the dot, e.g. "B" for test "A.B"). | 
| +  std::string test_name; | 
| + | 
| +  // True if the test passed. | 
| +  bool success; | 
| + | 
| +  // Time it took to run the test. | 
| +  base::TimeDelta elapsed_time; | 
| +}; | 
| + | 
| // Interface for use with LaunchTests that abstracts away exact details | 
| // which tests and how are run. | 
| class TestLauncherDelegate { | 
| @@ -32,10 +53,18 @@ class TestLauncherDelegate { | 
| virtual bool ShouldRunTest(const testing::TestCase* test_case, | 
| const testing::TestInfo* test_info) = 0; | 
|  | 
| -  // Called to make the delegate run specified test. Should return true | 
| -  // on success. | 
| -  virtual bool RunTest(const testing::TestCase* test_case, | 
| -                       const testing::TestInfo* test_info) = 0; | 
| +  // Called to make the delegate run specified test. After the delegate | 
| +  // finishes running the test (can do so asynchronously and out-of-order) | 
| +  // it must call |callback| regardless of test success. | 
| +  typedef base::Callback<void(const TestResult& result)> TestResultCallback; | 
| +  virtual void RunTest(const testing::TestCase* test_case, | 
| +                       const testing::TestInfo* test_info, | 
| +                       const TestResultCallback& callback) = 0; | 
| + | 
| +  // If the delegate is running tests asynchronously, it must finish | 
| +  // running all pending tests and call their callbacks before returning | 
| +  // from this method. | 
| +  virtual void RunRemainingTests() = 0; | 
|  | 
| protected: | 
| virtual ~TestLauncherDelegate(); | 
|  |