18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 1999 Harri Porten (porten@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2008 Apple Inc. All rights reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2008 Eric Seidel <eric@webkit.org>
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Lesser General Public
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Lesser General Public License for more details.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Lesser General Public
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License along with this library; if not, write to the Free Software
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef ScriptController_h
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ScriptController_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSDOMWindowShell.h"
26e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "ScriptControllerBase.h"
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ScriptInstance.h"
282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <heap/Strong.h>
29dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/Forward.h>
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefPtr.h>
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RetainPtr.h>
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef __OBJC__
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class WebScriptObject;
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebScriptObject;
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct NPObject;
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC {
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class JSGlobalObject;
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    namespace Bindings {
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        class RootObject;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Event;
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass EventListener;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HTMLPlugInElement;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Frame;
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Node;
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass ScriptSourceCode;
60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass ScriptValue;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Widget;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef HashMap<void*, RefPtr<JSC::Bindings::RootObject> > RootObjectMap;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ScriptController {
66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    friend class ScriptCachedFrameData;
672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    typedef WTF::HashMap< RefPtr<DOMWrapperWorld>, JSC::Strong<JSDOMWindowShell> > ShellMap;
68cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ScriptController(Frame*);
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ~ScriptController();
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    static PassRefPtr<DOMWrapperWorld> createWorld();
74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSDOMWindowShell* createWindowShell(DOMWrapperWorld*);
76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void destroyWindowShell(DOMWrapperWorld*);
77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
78cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    JSDOMWindowShell* windowShell(DOMWrapperWorld* world)
79cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    {
80cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        ShellMap::iterator iter = m_windowShells.find(world);
81cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return (iter != m_windowShells.end()) ? iter->second.get() : initScript(world);
82cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    }
83cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    JSDOMWindowShell* existingWindowShell(DOMWrapperWorld* world) const
84cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    {
85cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        ShellMap::const_iterator iter = m_windowShells.find(world);
86cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return (iter != m_windowShells.end()) ? iter->second.get() : 0;
87cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    }
88cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    JSDOMWindow* globalObject(DOMWrapperWorld* world)
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
90cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return windowShell(world)->window();
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    static void getAllWorlds(Vector<DOMWrapperWorld*>&);
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ScriptValue executeScript(const ScriptSourceCode&);
962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ScriptValue executeScript(const String& script, bool forceUserGesture = false);
972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ScriptValue executeScriptInWorld(DOMWrapperWorld*, const String& script, bool forceUserGesture = false);
98cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
99cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // Returns true if argument is a JavaScript URL.
100a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    bool executeIfJavaScriptURL(const KURL&, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL);
101cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
1023a209a6ece975c026508762103516b7d0e55c18aSteve Block    // This function must be called from the main thread. It is safe to call it repeatedly.
1033a209a6ece975c026508762103516b7d0e55c18aSteve Block    // Darwin is an exception to this rule: it is OK to call this function from any thread, even reentrantly.
1043a209a6ece975c026508762103516b7d0e55c18aSteve Block    static void initializeThreading();
1053a209a6ece975c026508762103516b7d0e55c18aSteve Block
1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ScriptValue evaluate(const ScriptSourceCode&);
1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ScriptValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld*);
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    int eventHandlerLineNumber() const;
11006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setProcessingTimerCallback(bool b) { m_processingTimerCallback = b; }
112f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    static bool processingUserGesture();
113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool anyPageIsProcessingUserGesture() const;
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
115e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static bool canAccessFromCurrentOrigin(Frame*);
116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool canExecuteScripts(ReasonForCallingCanExecuteScripts);
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
118d0825bca7fe65beaee391d30da42e937db621564Steve Block    // Debugger can be 0 to detach any existing Debugger.
119d0825bca7fe65beaee391d30da42e937db621564Steve Block    void attachDebugger(JSC::Debugger*); // Attaches/detaches in all worlds/window shells.
120d0825bca7fe65beaee391d30da42e937db621564Steve Block    void attachDebugger(JSDOMWindowShell*, JSC::Debugger*);
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setPaused(bool b) { m_paused = b; }
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isPaused() const { return m_paused; }
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void setAllowPopupsFromPlugin(bool allowPopupsFromPlugin) { m_allowPopupsFromPlugin = allowPopupsFromPlugin; }
1265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool allowPopupsFromPlugin() const { return m_allowPopupsFromPlugin; }
1275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const String* sourceURL() const { return m_sourceURL; } // 0 if we are not evaluating any script
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
130e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    void clearWindowShell(bool goingIntoPageCache = false);
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void updateDocument();
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1335af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    void namedItemAdded(HTMLDocument*, const AtomicString&) { }
1345af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    void namedItemRemoved(HTMLDocument*, const AtomicString&) { }
1355af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Notifies the ScriptController that the securityOrigin of the current
137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // document was modified.  For example, this method is called when
138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // document.domain is set.  This method is *not* called when a new document
139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // is attached to a frame because updateDocument() is called instead.
140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void updateSecurityOrigin();
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clearScriptObjects();
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void cleanupScriptObjectsForPlugin(void*);
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void updatePlatformScriptObjects();
146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
147635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    PassScriptInstance createScriptInstanceForWidget(Widget*);
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    JSC::Bindings::RootObject* bindingRootObject();
149545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    JSC::Bindings::RootObject* cacheableBindingRootObject();
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PassRefPtr<JSC::Bindings::RootObject> createRootObject(void* nativeHandle);
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
153967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if ENABLE(INSPECTOR)
154967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    static void setCaptureCallStackForUncaughtExceptions(bool);
155967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif
156967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
15821939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(JAVA_BRIDGE)
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void initJavaJSBindings();
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebScriptObject* windowScriptObject();
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    JSC::JSObject* jsObjectForPluginElement(HTMLPlugInElement*);
1658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API)
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPObject* createScriptObjectForPluginElement(HTMLPlugInElement*);
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPObject* windowScriptNPObject();
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
172cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    JSDOMWindowShell* initScript(DOMWrapperWorld* world);
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void disconnectPlatformScriptObjects();
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool isJavaScriptAnchorNavigation() const;
177635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
178cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    ShellMap m_windowShells;
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Frame* m_frame;
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const String* m_sourceURL;
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
182cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_inExecuteScript;
183cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_processingTimerCallback;
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_paused;
1865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool m_allowPopupsFromPlugin;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
188545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // The root object used for objects bound outside the context of a plugin, such
189545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // as NPAPI plugins. The plugins using these objects prevent a page from being cached so they
190545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // are safe to invalidate() when WebKit navigates away from the page that contains them.
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<JSC::Bindings::RootObject> m_bindingRootObject;
192545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // Unlike m_bindingRootObject these objects are used in pages that are cached, so they are not invalidate()'d.
193545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    // This ensures they are still available when the page is restored.
194545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    RefPtr<JSC::Bindings::RootObject> m_cacheableBindingRootObject;
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RootObjectMap m_rootObjects;
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API)
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NPObject* m_windowScriptNPObject;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RetainPtr<WebScriptObject> m_windowScriptObject;
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ScriptController_h
207