OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/task_scheduler/scheduler_worker.h" | 5 #include "base/task_scheduler/scheduler_worker.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <vector> | 10 #include <vector> |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "base/test/test_timeouts.h" | 23 #include "base/test/test_timeouts.h" |
24 #include "base/threading/platform_thread.h" | 24 #include "base/threading/platform_thread.h" |
25 #include "base/threading/simple_thread.h" | 25 #include "base/threading/simple_thread.h" |
26 #include "base/time/time.h" | 26 #include "base/time/time.h" |
27 #include "build/build_config.h" | 27 #include "build/build_config.h" |
28 #include "testing/gmock/include/gmock/gmock.h" | 28 #include "testing/gmock/include/gmock/gmock.h" |
29 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
30 | 30 |
31 #if defined(OS_WIN) | 31 #if defined(OS_WIN) |
32 #include <objbase.h> | 32 #include <objbase.h> |
33 | |
34 #include "base/win/com_init_check_hook.h" | |
35 #endif | 33 #endif |
36 | 34 |
37 using testing::_; | 35 using testing::_; |
38 using testing::Mock; | 36 using testing::Mock; |
39 using testing::Ne; | 37 using testing::Ne; |
40 using testing::StrictMock; | 38 using testing::StrictMock; |
41 | 39 |
42 namespace base { | 40 namespace base { |
43 namespace internal { | 41 namespace internal { |
44 namespace { | 42 namespace { |
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 // until GetWork() returns. | 924 // until GetWork() returns. |
927 auto worker = make_scoped_refptr(new SchedulerWorker( | 925 auto worker = make_scoped_refptr(new SchedulerWorker( |
928 ThreadPriority::NORMAL, std::move(delegate), &task_tracker, nullptr, | 926 ThreadPriority::NORMAL, std::move(delegate), &task_tracker, nullptr, |
929 SchedulerBackwardCompatibility::INIT_COM_STA)); | 927 SchedulerBackwardCompatibility::INIT_COM_STA)); |
930 worker->Start(); | 928 worker->Start(); |
931 worker->WakeUp(); | 929 worker->WakeUp(); |
932 delegate_raw->WaitUntilGetWorkReturned(); | 930 delegate_raw->WaitUntilGetWorkReturned(); |
933 | 931 |
934 // The call to CoInitializeEx() should have returned S_FALSE to indicate that | 932 // The call to CoInitializeEx() should have returned S_FALSE to indicate that |
935 // the COM library was already initialized on the thread. | 933 // the COM library was already initialized on the thread. |
936 // See SchedulerWorker::Thread::ThreadMain for why we expect two different | |
937 // results here. | |
938 #if defined(COM_INIT_CHECK_HOOK_ENABLED) | |
939 EXPECT_EQ(S_OK, delegate_raw->coinitialize_hresult()); | |
940 #else | |
941 EXPECT_EQ(S_FALSE, delegate_raw->coinitialize_hresult()); | 934 EXPECT_EQ(S_FALSE, delegate_raw->coinitialize_hresult()); |
942 #endif | |
943 | 935 |
944 worker->JoinForTesting(); | 936 worker->JoinForTesting(); |
945 } | 937 } |
946 | 938 |
947 TEST(TaskSchedulerWorkerTest, BackwardCompatibilityDisabled) { | 939 TEST(TaskSchedulerWorkerTest, BackwardCompatibilityDisabled) { |
948 TaskTracker task_tracker; | 940 TaskTracker task_tracker; |
949 auto delegate = MakeUnique<CoInitializeDelegate>(); | 941 auto delegate = MakeUnique<CoInitializeDelegate>(); |
950 CoInitializeDelegate* const delegate_raw = delegate.get(); | 942 CoInitializeDelegate* const delegate_raw = delegate.get(); |
951 | 943 |
952 // Create a worker with backward compatibility DISABLED. Wake it up and wait | 944 // Create a worker with backward compatibility DISABLED. Wake it up and wait |
953 // until GetWork() returns. | 945 // until GetWork() returns. |
954 auto worker = make_scoped_refptr(new SchedulerWorker( | 946 auto worker = make_scoped_refptr(new SchedulerWorker( |
955 ThreadPriority::NORMAL, std::move(delegate), &task_tracker, nullptr, | 947 ThreadPriority::NORMAL, std::move(delegate), &task_tracker, nullptr, |
956 SchedulerBackwardCompatibility::DISABLED)); | 948 SchedulerBackwardCompatibility::DISABLED)); |
957 worker->Start(); | 949 worker->Start(); |
958 worker->WakeUp(); | 950 worker->WakeUp(); |
959 delegate_raw->WaitUntilGetWorkReturned(); | 951 delegate_raw->WaitUntilGetWorkReturned(); |
960 | 952 |
961 // The call to CoInitializeEx() should have returned S_OK to indicate that the | 953 // The call to CoInitializeEx() should have returned S_OK to indicate that the |
962 // COM library wasn't already initialized on the thread. | 954 // COM library wasn't already initialized on the thread. |
963 EXPECT_EQ(S_OK, delegate_raw->coinitialize_hresult()); | 955 EXPECT_EQ(S_OK, delegate_raw->coinitialize_hresult()); |
964 | 956 |
965 worker->JoinForTesting(); | 957 worker->JoinForTesting(); |
966 } | 958 } |
967 | 959 |
968 #endif // defined(OS_WIN) | 960 #endif // defined(OS_WIN) |
969 | 961 |
970 } // namespace internal | 962 } // namespace internal |
971 } // namespace base | 963 } // namespace base |
OLD | NEW |