~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/3rdparty/webkit/WebCore/bindings/js/JSWorkerContextCustom.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2009-11-02 18:30:08 UTC
  • mfrom: (1.2.2 upstream)
  • mto: (15.2.5 experimental)
  • mto: This revision was merged to the branch mainline in revision 88.
  • Revision ID: james.westby@ubuntu.com-20091102183008-b6a4gcs128mvfb3m
Tags: upstream-4.6.0~beta1
ImportĀ upstreamĀ versionĀ 4.6.0~beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
 
2
 * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
3
3
 *
4
4
 * Redistribution and use in source and binary forms, with or without
5
5
 * modification, are permitted provided that the following conditions
30
30
#include "JSWorkerContext.h"
31
31
 
32
32
#include "JSDOMBinding.h"
 
33
#include "JSDOMGlobalObject.h"
33
34
#include "JSEventListener.h"
 
35
#include "JSMessageChannelConstructor.h"
 
36
#include "JSMessagePort.h"
 
37
#include "JSWorkerLocation.h"
 
38
#include "JSWorkerNavigator.h"
 
39
#include "JSXMLHttpRequestConstructor.h"
 
40
#include "ScheduledAction.h"
34
41
#include "WorkerContext.h"
 
42
#include "WorkerLocation.h"
 
43
#include "WorkerNavigator.h"
 
44
#include <interpreter/Interpreter.h>
 
45
 
 
46
#if ENABLE(EVENTSOURCE)
 
47
#include "JSEventSourceConstructor.h"
 
48
#endif
35
49
 
36
50
using namespace JSC;
37
51
 
38
52
namespace WebCore {
39
53
 
40
 
bool JSWorkerContext::customGetOwnPropertySlot(JSC::ExecState* exec, const JSC::Identifier& propertyName, JSC::PropertySlot& slot)
 
54
void JSWorkerContext::markChildren(MarkStack& markStack)
 
55
{
 
56
    Base::markChildren(markStack);
 
57
 
 
58
    JSGlobalData& globalData = *this->globalData();
 
59
 
 
60
    markActiveObjectsForContext(markStack, globalData, scriptExecutionContext());
 
61
 
 
62
    markDOMObjectWrapper(markStack, globalData, impl()->optionalLocation());
 
63
    markDOMObjectWrapper(markStack, globalData, impl()->optionalNavigator());
 
64
 
 
65
    impl()->markEventListeners(markStack);
 
66
}
 
67
 
 
68
bool JSWorkerContext::getOwnPropertySlotDelegate(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
41
69
{
42
70
    // Look for overrides before looking at any of our own properties.
43
71
    if (JSGlobalObject::getOwnPropertySlot(exec, propertyName, slot))
45
73
    return false;
46
74
}
47
75
 
48
 
void JSWorkerContext::mark()
49
 
{
50
 
    Base::mark();
51
 
 
52
 
    markActiveObjectsForContext(*globalData(), scriptExecutionContext());
53
 
 
54
 
    if (JSUnprotectedEventListener* listener = static_cast<JSUnprotectedEventListener*>(impl()->onmessage()))
55
 
        listener->mark();
56
 
 
57
 
    typedef WorkerContext::EventListenersMap EventListenersMap;
58
 
    typedef WorkerContext::ListenerVector ListenerVector;
59
 
    EventListenersMap& eventListeners = impl()->eventListeners();
60
 
    for (EventListenersMap::iterator mapIter = eventListeners.begin(); mapIter != eventListeners.end(); ++mapIter) {
61
 
        for (ListenerVector::iterator vecIter = mapIter->second.begin(); vecIter != mapIter->second.end(); ++vecIter) {
62
 
            JSUnprotectedEventListener* listener = static_cast<JSUnprotectedEventListener*>(vecIter->get());
63
 
            listener->mark();
64
 
        }
 
76
bool JSWorkerContext::getOwnPropertyDescriptorDelegate(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
 
77
{
 
78
    // Look for overrides before looking at any of our own properties.
 
79
    if (JSGlobalObject::getOwnPropertyDescriptor(exec, propertyName, descriptor))
 
80
        return true;
 
81
    return false;
 
82
}
 
83
 
 
84
#if ENABLE(EVENTSOURCE)
 
85
JSValue JSWorkerContext::eventSource(ExecState* exec) const
 
86
{
 
87
    return getDOMConstructor<JSEventSourceConstructor>(exec, this);
 
88
}
 
89
#endif
 
90
 
 
91
JSValue JSWorkerContext::xmlHttpRequest(ExecState* exec) const
 
92
{
 
93
    return getDOMConstructor<JSXMLHttpRequestConstructor>(exec, this);
 
94
}
 
95
 
 
96
JSValue JSWorkerContext::importScripts(ExecState* exec, const ArgList& args)
 
97
{
 
98
    if (!args.size())
 
99
        return jsUndefined();
 
100
 
 
101
    Vector<String> urls;
 
102
    for (unsigned i = 0; i < args.size(); i++) {
 
103
        urls.append(args.at(i).toString(exec));
 
104
        if (exec->hadException())
 
105
            return jsUndefined();
65
106
    }
66
 
}
67
 
 
68
 
JSValuePtr JSWorkerContext::self(ExecState*) const
69
 
{
70
 
    return asValue();
71
 
}
72
 
 
73
 
void JSWorkerContext::setSelf(ExecState* exec, JSValuePtr value)
74
 
{
75
 
    putDirect(Identifier(exec, "self"), value);
76
 
}
77
 
 
78
 
JSValuePtr JSWorkerContext::addEventListener(ExecState* exec, const ArgList& args)
79
 
{
80
 
    RefPtr<JSUnprotectedEventListener> listener = findOrCreateJSUnprotectedEventListener(exec, args.at(exec, 1));
81
 
    if (!listener)
82
 
        return jsUndefined();
83
 
    impl()->addEventListener(args.at(exec, 0)->toString(exec), listener.release(), args.at(exec, 2)->toBoolean(exec));
84
 
    return jsUndefined();
85
 
}
86
 
 
87
 
JSValuePtr JSWorkerContext::removeEventListener(ExecState* exec, const ArgList& args)
88
 
{
89
 
    JSUnprotectedEventListener* listener = findJSUnprotectedEventListener(exec, args.at(exec, 1));
90
 
    if (!listener)
91
 
        return jsUndefined();
92
 
    impl()->removeEventListener(args.at(exec, 0)->toString(exec), listener, args.at(exec, 2)->toBoolean(exec));
93
 
    return jsUndefined();
94
 
}
 
107
    ExceptionCode ec = 0;
 
108
    int signedLineNumber;
 
109
    intptr_t sourceID;
 
110
    UString sourceURL;
 
111
    JSValue function;
 
112
    exec->interpreter()->retrieveLastCaller(exec, signedLineNumber, sourceID, sourceURL, function);
 
113
 
 
114
    impl()->importScripts(urls, sourceURL, signedLineNumber >= 0 ? signedLineNumber : 0, ec);
 
115
    setDOMException(exec, ec);
 
116
    return jsUndefined();
 
117
}
 
118
 
 
119
JSValue JSWorkerContext::addEventListener(ExecState* exec, const ArgList& args)
 
120
{
 
121
    JSValue listener = args.at(1);
 
122
    if (!listener.isObject())
 
123
        return jsUndefined();
 
124
 
 
125
    impl()->addEventListener(args.at(0).toString(exec), JSEventListener::create(asObject(listener), false), args.at(2).toBoolean(exec));
 
126
    return jsUndefined();
 
127
}
 
128
 
 
129
JSValue JSWorkerContext::removeEventListener(ExecState* exec, const ArgList& args)
 
130
{
 
131
    JSValue listener = args.at(1);
 
132
    if (!listener.isObject())
 
133
        return jsUndefined();
 
134
 
 
135
    impl()->removeEventListener(args.at(0).toString(exec), JSEventListener::create(asObject(listener), false).get(), args.at(2).toBoolean(exec));
 
136
    return jsUndefined();
 
137
}
 
138
 
 
139
JSValue JSWorkerContext::setTimeout(ExecState* exec, const ArgList& args)
 
140
{
 
141
    ScheduledAction* action = ScheduledAction::create(exec, args);
 
142
    if (exec->hadException())
 
143
        return jsUndefined();
 
144
    int delay = args.at(1).toInt32(exec);
 
145
    return jsNumber(exec, impl()->setTimeout(action, delay));
 
146
}
 
147
 
 
148
JSValue JSWorkerContext::setInterval(ExecState* exec, const ArgList& args)
 
149
{
 
150
    ScheduledAction* action = ScheduledAction::create(exec, args);
 
151
    if (exec->hadException())
 
152
        return jsUndefined();
 
153
    int delay = args.at(1).toInt32(exec);
 
154
    return jsNumber(exec, impl()->setInterval(action, delay));
 
155
}
 
156
 
 
157
 
 
158
#if ENABLE(CHANNEL_MESSAGING)
 
159
JSValue JSWorkerContext::messageChannel(ExecState* exec) const
 
160
{
 
161
    return getDOMConstructor<JSMessageChannelConstructor>(exec, this);
 
162
}
 
163
#endif
95
164
 
96
165
} // namespace WebCore
97
166