| 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 | 
|---|