Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #include "mozilla/dom/CallbackInterface.h"
8 : #include "jsapi.h"
9 : #include "mozilla/dom/BindingUtils.h"
10 : #include "nsPrintfCString.h"
11 :
12 : namespace mozilla {
13 : namespace dom {
14 :
15 : bool
16 21 : CallbackInterface::GetCallableProperty(JSContext* cx, JS::Handle<jsid> aPropId,
17 : JS::MutableHandle<JS::Value> aCallable)
18 : {
19 21 : if (!JS_GetPropertyById(cx, CallbackKnownNotGray(), aPropId, aCallable)) {
20 0 : return false;
21 : }
22 42 : if (!aCallable.isObject() ||
23 21 : !JS::IsCallable(&aCallable.toObject())) {
24 : char* propName =
25 0 : JS_EncodeString(cx, JS_FORGET_STRING_FLATNESS(JSID_TO_FLAT_STRING(aPropId)));
26 0 : nsPrintfCString description("Property '%s'", propName);
27 0 : JS_free(cx, propName);
28 0 : ThrowErrorMessage(cx, MSG_NOT_CALLABLE, description.get());
29 0 : return false;
30 : }
31 :
32 21 : return true;
33 : }
34 :
35 : } // namespace dom
36 : } // namespace mozilla
|