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