~ubuntu-branches/ubuntu/lucid/webkit/lucid-security

« back to all changes in this revision

Viewing changes to WebCore/bindings/js/JSInjectedScriptHostCustom.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Gustavo Noronha Silva
  • Date: 2010-01-20 20:09:57 UTC
  • mfrom: (1.2.7 upstream) (4.3.8 sid)
  • Revision ID: james.westby@ubuntu.com-20100120200957-3ng8lah18c7pmm52
* New upstream release
- Fixes crashes related to clearing the clipboard, which many users were
  experiencing (Closes: #565166)

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
#endif
60
60
#include "TextIterator.h"
61
61
#include "VisiblePosition.h"
 
62
#include <parser/SourceCode.h>
62
63
#include <runtime/JSArray.h>
63
64
#include <runtime/JSLock.h>
64
65
#include <wtf/Vector.h>
73
74
 
74
75
namespace WebCore {
75
76
 
 
77
static ScriptObject createInjectedScript(const String& source, InjectedScriptHost* injectedScriptHost, ScriptState* scriptState, long id)
 
78
{
 
79
    SourceCode sourceCode = makeSource(source);
 
80
    JSLock lock(SilenceAssertionsOnly);
 
81
    JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(scriptState->lexicalGlobalObject());
 
82
    JSValue globalThisValue = scriptState->globalThisValue();
 
83
    Completion comp = JSC::evaluate(scriptState, globalObject->globalScopeChain(), sourceCode, globalThisValue);
 
84
    if (comp.complType() != JSC::Normal && comp.complType() != JSC::ReturnValue)
 
85
        return ScriptObject();
 
86
    JSValue functionValue = comp.value();
 
87
    CallData callData;
 
88
    CallType callType = functionValue.getCallData(callData);
 
89
    if (callType == CallTypeNone)
 
90
        return ScriptObject();
 
91
 
 
92
    MarkedArgumentBuffer args;
 
93
    args.append(toJS(scriptState, globalObject, injectedScriptHost));
 
94
    args.append(globalThisValue);
 
95
    args.append(jsNumber(scriptState, id));
 
96
    JSValue result = JSC::call(scriptState, functionValue, callType, callData, globalThisValue, args);
 
97
    if (result.isObject())
 
98
        return ScriptObject(scriptState, result.getObject());
 
99
    return ScriptObject();
 
100
}
 
101
 
76
102
#if ENABLE(DATABASE)
77
103
JSValue JSInjectedScriptHost::databaseForId(ExecState* exec, const ArgList& args)
78
104
{
215
241
}
216
242
#endif
217
243
 
 
244
ScriptObject InjectedScriptHost::injectedScriptFor(ScriptState* scriptState)
 
245
{
 
246
    JSLock lock(SilenceAssertionsOnly);
 
247
    JSDOMGlobalObject* globalObject = static_cast<JSDOMGlobalObject*>(scriptState->lexicalGlobalObject());
 
248
    JSObject* injectedScript = globalObject->injectedScript();
 
249
    if (injectedScript)
 
250
        return ScriptObject(scriptState, injectedScript);
 
251
 
 
252
    ASSERT(!m_injectedScriptSource.isEmpty());
 
253
    ScriptObject injectedScriptObject = createInjectedScript(m_injectedScriptSource, this, scriptState, m_nextInjectedScriptId);
 
254
    globalObject->setInjectedScript(injectedScriptObject.jsObject());
 
255
    m_idToInjectedScript.set(m_nextInjectedScriptId, injectedScriptObject);
 
256
    m_nextInjectedScriptId++;
 
257
    return injectedScriptObject;
 
258
}
 
259
 
218
260
} // namespace WebCore
219
261
 
220
262
#endif // ENABLE(INSPECTOR)