Home | History | Annotate | Download | only in DumpRenderTree
      1 /*
      2  * Copyright (C) 2008, 2009, 2010 Apple Inc. All Rights Reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "AccessibilityController.h"
     28 
     29 #include "AccessibilityUIElement.h"
     30 #include <JavaScriptCore/JSRetainPtr.h>
     31 
     32 // Static Value Getters
     33 
     34 static JSValueRef getFocusedElementCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
     35 {
     36     AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     37     return AccessibilityUIElement::makeJSAccessibilityUIElement(context, controller->focusedElement());
     38 }
     39 
     40 static JSValueRef getRootElementCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
     41 {
     42     AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     43     return AccessibilityUIElement::makeJSAccessibilityUIElement(context, controller->rootElement());
     44 }
     45 
     46 // Object Creation
     47 
     48 void AccessibilityController::makeWindowObject(JSContextRef context, JSObjectRef windowObject, JSValueRef* exception)
     49 {
     50     JSRetainPtr<JSStringRef> accessibilityControllerStr(Adopt, JSStringCreateWithUTF8CString("accessibilityController"));
     51 
     52     JSClassRef classRef = getJSClass();
     53     JSValueRef accessibilityControllerObject = JSObjectMake(context, classRef, this);
     54     JSClassRelease(classRef);
     55 
     56     JSObjectSetProperty(context, windowObject, accessibilityControllerStr.get(), accessibilityControllerObject, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, exception);
     57 }
     58 
     59 static JSValueRef logFocusEventsCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef*)
     60 {
     61     AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     62     controller->setLogFocusEvents(true);
     63     return JSValueMakeUndefined(ctx);
     64 }
     65 
     66 static JSValueRef logValueChangeEventsCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef*)
     67 {
     68     AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     69     controller->setLogValueChangeEvents(true);
     70     return JSValueMakeUndefined(ctx);
     71 }
     72 
     73 static JSValueRef logScrollingStartEventsCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef*)
     74 {
     75     AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     76     controller->setLogScrollingStartEvents(true);
     77     return JSValueMakeUndefined(ctx);
     78 }
     79 
     80 JSClassRef AccessibilityController::getJSClass()
     81 {
     82     static JSStaticFunction staticFunctions[] = {
     83         { "logFocusEvents", logFocusEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     84         { "logValueChangeEvents", logValueChangeEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     85         { "logScrollingStartEvents", logScrollingStartEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     86         { 0, 0, 0 }
     87     };
     88 
     89     static JSStaticValue staticValues[] = {
     90         { "focusedElement", getFocusedElementCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     91         { "rootElement", getRootElementCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     92         { 0, 0, 0, 0 }
     93     };
     94 
     95     static JSClassDefinition classDefinition = {
     96         0, kJSClassAttributeNone, "AccessibilityController", 0, staticValues, staticFunctions,
     97         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
     98     };
     99 
    100     return JSClassCreate(&classDefinition);
    101 }
    102 
    103 void AccessibilityController::resetToConsistentState()
    104 {
    105     setLogFocusEvents(false);
    106     setLogValueChangeEvents(false);
    107     setLogScrollingStartEvents(false);
    108 }
    109