ScriptController.h [plain text]
#ifndef ScriptController_h
#define ScriptController_h
#include "ScriptControllerBase.h"
#include "ScriptInstance.h"
#include "ScriptValue.h"
#include "V8Proxy.h"
#include <v8.h>
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
#if PLATFORM(QT)
#include <qglobal.h>
QT_BEGIN_NAMESPACE
class QScriptEngine;
QT_END_NAMESPACE
#endif
struct NPObject;
namespace WebCore {
class DOMWrapperWorld;
class Event;
class Frame;
class HTMLPlugInElement;
class ScriptSourceCode;
class Widget;
class ScriptController {
public:
ScriptController(Frame*);
~ScriptController();
V8Proxy* proxy() { return m_proxy.get(); }
ScriptValue executeScript(const ScriptSourceCode&);
ScriptValue executeScript(const String& script, bool forceUserGesture = false);
bool executeIfJavaScriptURL(const KURL&, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL);
static void initializeThreading();
ScriptValue evaluate(const ScriptSourceCode&);
void evaluateInIsolatedWorld(unsigned worldID, const Vector<ScriptSourceCode>&);
void evaluateInIsolatedWorld(unsigned worldID, const Vector<ScriptSourceCode>&, int extensionGroup);
ScriptController* windowShell(DOMWrapperWorld*) { return this; }
ScriptController* existingWindowShell(DOMWrapperWorld*) { return this; }
void collectGarbage();
void lowMemoryNotification();
void bindToWindowObject(Frame*, const String& key, NPObject*);
PassScriptInstance createScriptInstanceForWidget(Widget*);
bool haveInterpreter() const;
void disableEval();
static bool canAccessFromCurrentOrigin(Frame*);
#if ENABLE(INSPECTOR)
static void setCaptureCallStackForUncaughtExceptions(bool);
#endif
bool canExecuteScripts(ReasonForCallingCanExecuteScripts);
void attachDebugger(void*);
static Frame* retrieveFrameForEnteredContext();
static Frame* retrieveFrameForCurrentContext();
static bool isSafeScript(Frame*);
static void setFlags(const char* string, int length);
void finishedWithEvent(Event*);
TextPosition0 eventHandlerPosition() const;
void setProcessingTimerCallback(bool processingTimerCallback) { m_processingTimerCallback = processingTimerCallback; }
static bool processingUserGesture();
bool anyPageIsProcessingUserGesture() const;
void setPaused(bool paused) { m_paused = paused; }
bool isPaused() const { return m_paused; }
const String* sourceURL() const { return m_sourceURL; }
void clearWindowShell(bool = false);
void updateDocument();
void namedItemAdded(HTMLDocument*, const AtomicString&);
void namedItemRemoved(HTMLDocument*, const AtomicString&);
void updateSecurityOrigin();
void clearScriptObjects();
void updatePlatformScriptObjects();
void cleanupScriptObjectsForPlugin(Widget*);
#if ENABLE(NETSCAPE_PLUGIN_API)
NPObject* createScriptObjectForPluginElement(HTMLPlugInElement*);
NPObject* windowScriptNPObject();
#endif
#if PLATFORM(QT)
QScriptEngine* qtScriptEngine();
#endif
void evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld*);
static void getAllWorlds(Vector<DOMWrapperWorld*>& worlds);
void setAllowPopupsFromPlugin(bool allowPopupsFromPlugin) { m_allowPopupsFromPlugin = allowPopupsFromPlugin; }
bool allowPopupsFromPlugin() const { return m_allowPopupsFromPlugin; }
private:
Frame* m_frame;
const String* m_sourceURL;
bool m_inExecuteScript;
bool m_processingTimerCallback;
bool m_paused;
bool m_allowPopupsFromPlugin;
OwnPtr<V8Proxy> m_proxy;
typedef HashMap<Widget*, NPObject*> PluginObjectMap;
#if PLATFORM(QT)
OwnPtr<QScriptEngine> m_qtScriptEngine;
#endif
PluginObjectMap m_pluginObjects;
#if ENABLE(NETSCAPE_PLUGIN_API)
NPObject* m_windowScriptNPObject;
#endif
};
}
#endif // ScriptController_h