OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "config.h" | 5 #include "config.h" |
6 #include <wtf/MainThread.h> | 6 #include <wtf/MainThread.h> |
7 #include <wtf/Threading.h> | 7 #include <wtf/Threading.h> |
8 #undef LOG | 8 #undef LOG |
9 | 9 |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
11 | 11 |
12 #include "webkit/tools/test_shell/test_webworker_helper.h" | 12 #include "webkit/tools/test_shell/test_webworker_helper.h" |
13 | 13 |
| 14 #if defined(OS_MACOSX) |
| 15 #include <dlfcn.h> |
| 16 #endif |
| 17 |
14 #include "base/logging.h" | 18 #include "base/logging.h" |
15 #include "base/file_util.h" | 19 #include "base/file_util.h" |
16 #include "base/path_service.h" | 20 #include "base/path_service.h" |
17 #include "third_party/WebKit/WebKit/chromium/public/WebKit.h" | 21 #include "third_party/WebKit/WebKit/chromium/public/WebKit.h" |
18 #include "webkit/glue/webworkerclient.h" | 22 #include "webkit/glue/webworkerclient.h" |
19 | 23 |
20 | |
21 WebWorker* TestWebWorkerHelper::CreateWebWorker(WebWorkerClient* client) { | 24 WebWorker* TestWebWorkerHelper::CreateWebWorker(WebWorkerClient* client) { |
22 TestWebWorkerHelper* loader = new TestWebWorkerHelper(); | 25 TestWebWorkerHelper* loader = new TestWebWorkerHelper(); |
23 return loader->CreateWebWorker_(client, loader); | 26 return loader->CreateWebWorker_(client, loader); |
24 } | 27 } |
25 | 28 |
26 TestWebWorkerHelper::TestWebWorkerHelper() : | 29 TestWebWorkerHelper::TestWebWorkerHelper() : |
27 #if defined(OS_WIN) | 30 #if defined(OS_WIN) |
28 module_(NULL), | 31 module_(NULL), |
29 #endif | 32 #endif |
30 CreateWebWorker_(NULL) { | 33 CreateWebWorker_(NULL) { |
31 Load(); | 34 Load(); |
32 } | 35 } |
33 | 36 |
34 TestWebWorkerHelper::~TestWebWorkerHelper() { | 37 TestWebWorkerHelper::~TestWebWorkerHelper() { |
35 } | 38 } |
36 | 39 |
37 bool TestWebWorkerHelper::IsMainThread() const { | 40 bool TestWebWorkerHelper::IsMainThread() const { |
38 return WTF::isMainThread(); | 41 return WTF::isMainThread(); |
39 } | 42 } |
40 | 43 |
41 void TestWebWorkerHelper::DispatchToMainThread(WTF::MainThreadFunction* func, | 44 void TestWebWorkerHelper::DispatchToMainThread(WTF::MainThreadFunction* func, |
42 void* context) { | 45 void* context) { |
43 return WTF::callOnMainThread(func, context); | 46 return WTF::callOnMainThread(func, context); |
44 } | 47 } |
45 | 48 |
46 bool TestWebWorkerHelper::Load() { | 49 void TestWebWorkerHelper::Load() { |
47 #if defined(OS_WIN) | |
48 FilePath path; | 50 FilePath path; |
49 PathService::Get(base::DIR_EXE, &path); | 51 PathService::Get(base::DIR_EXE, &path); |
| 52 |
| 53 #if defined(OS_WIN) |
50 path = path.AppendASCII("test_worker.dll"); | 54 path = path.AppendASCII("test_worker.dll"); |
51 | 55 |
52 module_ = LoadLibrary(path.value().c_str()); | 56 module_ = LoadLibrary(path.value().c_str()); |
53 if (module_ == 0) | 57 if (module_ == 0) |
54 return false; | 58 return; |
55 | 59 |
56 CreateWebWorker_ = reinterpret_cast<CreateWebWorkerFunc> | 60 CreateWebWorker_ = reinterpret_cast<CreateWebWorkerFunc> |
57 (GetProcAddress(module_, "CreateWebWorker")); | 61 (GetProcAddress(module_, "CreateWebWorker")); |
58 if (!CreateWebWorker_) { | 62 if (!CreateWebWorker_) { |
59 FreeLibrary(module_); | 63 FreeLibrary(module_); |
60 module_ = 0; | 64 module_ = 0; |
61 return false; | |
62 } | 65 } |
| 66 #elif defined(OS_MACOSX) |
| 67 path = path.AppendASCII("test_worker.dylib"); |
63 | 68 |
64 return true; | 69 module_ = dlopen(path.value().c_str(), RTLD_NOW | RTLD_LOCAL); |
| 70 if (!module_) |
| 71 return; |
| 72 |
| 73 CreateWebWorker_ = reinterpret_cast<CreateWebWorkerFunc> |
| 74 (dlsym(module_, "CreateWebWorker")); |
| 75 if (!CreateWebWorker_) { |
| 76 dlclose(module_); |
| 77 module_ = 0; |
| 78 } |
65 #else | 79 #else |
66 NOTIMPLEMENTED(); | 80 NOTIMPLEMENTED(); |
67 return false; | |
68 #endif | 81 #endif |
69 } | 82 } |
70 | 83 |
71 void TestWebWorkerHelper::Unload() { | 84 void TestWebWorkerHelper::Unload() { |
72 // Since this is called from DLL, delay the unloading until it can be | 85 // Since this is called from DLL, delay the unloading until it can be |
73 // invoked from EXE. | 86 // invoked from EXE. |
74 return WTF::callOnMainThread(UnloadHelper, this); | 87 return WTF::callOnMainThread(UnloadHelper, this); |
75 } | 88 } |
76 | 89 |
77 void TestWebWorkerHelper::UnloadHelper(void* param) { | 90 void TestWebWorkerHelper::UnloadHelper(void* param) { |
78 TestWebWorkerHelper* this_ptr = static_cast<TestWebWorkerHelper*>(param); | 91 TestWebWorkerHelper* this_ptr = static_cast<TestWebWorkerHelper*>(param); |
79 | 92 |
80 #if defined(OS_WIN) | 93 #if defined(OS_WIN) |
81 if (this_ptr->module_) { | 94 if (this_ptr->module_) { |
82 FreeLibrary(this_ptr->module_); | 95 FreeLibrary(this_ptr->module_); |
83 this_ptr->module_ = 0; | 96 this_ptr->module_ = 0; |
84 } | 97 } |
85 #else | 98 #else |
86 NOTIMPLEMENTED(); | 99 NOTIMPLEMENTED(); |
87 #endif | 100 #endif |
88 | 101 |
89 delete this_ptr; | 102 delete this_ptr; |
90 } | 103 } |
OLD | NEW |