Changeset 242349 in webkit
- Timestamp:
- Mar 4, 2019, 2:34:04 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
Source/JavaScriptCore/API/glib/JSCCallbackFunction.cpp (modified) (2 diffs)
-
Source/JavaScriptCore/ChangeLog (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/API/glib/JSCCallbackFunction.cpp
r239427 r242349 206 206 case G_TYPE_POINTER: 207 207 case G_TYPE_OBJECT: 208 if (auto* ptr = returnValue.data[0].v_pointer) { 209 auto* retval = jscClassGetOrCreateJSWrapper(m_class.get(), ptr); 210 g_value_unset(&returnValue); 211 return toRef(retval); 212 } 208 if (auto* ptr = returnValue.data[0].v_pointer) 209 return toRef(jscClassGetOrCreateJSWrapper(m_class.get(), ptr)); 213 210 *exception = toRef(JSC::createTypeError(toJS(jsContext), "constructor returned null"_s)); 214 211 break; … … 217 214 break; 218 215 } 216 g_value_unset(&returnValue); 219 217 return nullptr; 220 218 } -
trunk/Source/JavaScriptCore/ChangeLog
r242330 r242349 1 2019-03-04 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GLib] Returning G_TYPE_OBJECT from a constructor does not work 4 https://bugs.webkit.org/show_bug.cgi?id=195206 5 6 Reviewed by Žan Doberšek. 7 8 We are freeing the newly created object before returning from the constructor. 9 10 * API/glib/JSCCallbackFunction.cpp: 11 (JSC::JSCCallbackFunction::construct): 12 1 13 2019-03-02 Darin Adler <darin@apple.com> 2 14 -
trunk/Tools/ChangeLog
r242344 r242349 1 2019-03-04 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GLib] Returning G_TYPE_OBJECT from a constructor does not work 4 https://bugs.webkit.org/show_bug.cgi?id=195206 5 6 Reviewed by Žan Doberšek. 7 8 Add a new test case. 9 10 * TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp: 11 (testJSCClass): 12 1 13 2019-03-04 Charlie Turner <cturner@igalia.com> 2 14 -
trunk/Tools/TestWebKitAPI/Tests/JavaScriptCore/glib/TestJSC.cpp
r240431 r242349 1590 1590 }; 1591 1591 1592 static GFile* createGFile(const char* path) 1593 { 1594 GFile* file = g_file_new_for_path(path); 1595 auto* checker = static_cast<LeakChecker*>(g_object_get_data(G_OBJECT(jsc_context_get_current()), "leak-checker")); 1596 checker->watch(file); 1597 return file; 1598 } 1599 1592 1600 static void testJSCClass() 1593 1601 { … … 2248 2256 g_assert_did_throw(exceptionHandler, didThrow); 2249 2257 g_assert_true(jsc_context_get_exception(context.get()) == previousException.get()); 2258 } 2259 2260 { 2261 LeakChecker checker; 2262 GRefPtr<JSCContext> context = adoptGRef(jsc_context_new()); 2263 checker.watch(context.get()); 2264 g_object_set_data(G_OBJECT(context.get()), "leak-checker", &checker); 2265 ExceptionHandler exceptionHandler(context.get()); 2266 2267 JSCClass* jscClass = jsc_context_register_class(context.get(), "GFile", nullptr, nullptr, reinterpret_cast<GDestroyNotify>(g_object_unref)); 2268 checker.watch(jscClass); 2269 2270 GRefPtr<JSCValue> constructor = adoptGRef(jsc_class_add_constructor(jscClass, nullptr, G_CALLBACK(createGFile), nullptr, nullptr, G_TYPE_OBJECT, 1, G_TYPE_STRING)); 2271 checker.watch(constructor.get()); 2272 g_assert_true(jsc_value_is_constructor(constructor.get())); 2273 jsc_class_add_method(jscClass, "getPath", G_CALLBACK(g_file_get_path), nullptr, nullptr, G_TYPE_STRING, 0, G_TYPE_NONE); 2274 2275 jsc_context_set_value(context.get(), jsc_class_get_name(jscClass), constructor.get()); 2276 2277 GRefPtr<JSCValue> file = adoptGRef(jsc_context_evaluate(context.get(), "f = new GFile('.');", -1)); 2278 checker.watch(file.get()); 2279 g_assert_true(jsc_value_is_object(file.get())); 2280 g_assert_true(jsc_value_object_is_instance_of(file.get(), jsc_class_get_name(jscClass))); 2281 GRefPtr<JSCValue> result = adoptGRef(jsc_context_evaluate(context.get(), "f instanceof GFile;", -1)); 2282 checker.watch(result.get()); 2283 g_assert_true(jsc_value_is_boolean(result.get())); 2284 g_assert_true(jsc_value_to_boolean(result.get())); 2285 2286 g_assert_true(jsc_value_object_has_property(file.get(), "getPath")); 2287 GRefPtr<JSCValue> value = adoptGRef(jsc_value_object_invoke_method(file.get(), "getPath", G_TYPE_NONE)); 2288 checker.watch(value.get()); 2289 g_assert_true(jsc_value_is_string(value.get())); 2290 GUniquePtr<char> resultString(jsc_value_to_string(value.get())); 2291 GUniquePtr<char> currentDirectory(g_get_current_dir()); 2292 g_assert_cmpstr(resultString.get(), ==, currentDirectory.get()); 2293 2294 GRefPtr<JSCValue> value2 = adoptGRef(jsc_context_evaluate(context.get(), "f.getPath('.');", -1)); 2295 checker.watch(value2.get()); 2296 g_assert_true(jsc_value_is_string(value2.get())); 2297 resultString.reset(jsc_value_to_string(value2.get())); 2298 g_assert_cmpstr(resultString.get(), ==, currentDirectory.get()); 2250 2299 } 2251 2300 }
Note:
See TracChangeset
for help on using the changeset viewer.