本文整理汇总了C++中JSDOMWindowShell::window方法的典型用法代码示例。如果您正苦于以下问题:C++ JSDOMWindowShell::window方法的具体用法?C++ JSDOMWindowShell::window怎么用?C++ JSDOMWindowShell::window使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JSDOMWindowShell
的用法示例。
在下文中一共展示了JSDOMWindowShell::window方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: restore
void ScriptCachedFrameData::restore(Frame& frame)
{
JSLockHolder lock(JSDOMWindowBase::commonVM());
Page* page = frame.page();
ScriptController& scriptController = frame.script();
Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells();
for (size_t i = 0; i < windowShells.size(); ++i) {
JSDOMWindowShell* windowShell = windowShells[i].get();
DOMWrapperWorld* world = &windowShell->world();
if (JSDOMWindow* window = m_windows.get(world).get())
windowShell->setWindow(window->vm(), window);
else {
DOMWindow* domWindow = frame.document()->domWindow();
if (&windowShell->window()->impl() == domWindow)
continue;
windowShell->setWindow(domWindow);
if (page) {
scriptController.attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
if (page)
windowShell->window()->setConsoleClient(&page->console());
}
}
示例2: initScript
JSDOMWindowShell* ScriptController::initScript(DOMWrapperWorld& world)
{
ASSERT(!m_windowShells.contains(&world));
JSLockHolder lock(world.vm());
JSDOMWindowShell* windowShell = createWindowShell(world);
windowShell->window()->updateDocument();
if (m_frame.document()) {
bool shouldBypassMainWorldContentSecurityPolicy = !world.isNormal();
if (shouldBypassMainWorldContentSecurityPolicy)
windowShell->window()->setEvalEnabled(true);
else
windowShell->window()->setEvalEnabled(m_frame.document()->contentSecurityPolicy()->allowEval(0, shouldBypassMainWorldContentSecurityPolicy, ContentSecurityPolicy::ReportingStatus::SuppressReport), m_frame.document()->contentSecurityPolicy()->evalDisabledErrorMessage());
}
if (Page* page = m_frame.page()) {
attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
windowShell->window()->setConsoleClient(&page->console());
}
m_frame.loader().dispatchDidClearWindowObjectInWorld(world);
return windowShell;
}
示例3: clearWindowShell
void ScriptController::clearWindowShell(bool goingIntoPageCache)
{
if (m_windowShells.isEmpty())
return;
JSLock lock(SilenceAssertionsOnly);
for (ShellMap::iterator iter = m_windowShells.begin(); iter != m_windowShells.end(); ++iter) {
JSDOMWindowShell* windowShell = iter->second.get();
// Clear the debugger from the current window before setting the new window.
attachDebugger(windowShell, 0);
windowShell->window()->willRemoveFromWindowShell();
windowShell->setWindow(m_frame->domWindow());
// An m_cacheableBindingRootObject persists between page navigations
// so needs to know about the new JSDOMWindow.
if (m_cacheableBindingRootObject)
m_cacheableBindingRootObject->updateGlobalObject(windowShell->window());
if (Page* page = m_frame->page()) {
attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
// It's likely that resetting our windows created a lot of garbage, unless
// it went in a back/forward cache.
if (!goingIntoPageCache)
gcController().garbageCollectSoon();
}
示例4: restore
void ScriptCachedFrameData::restore(Frame* frame)
{
JSLockHolder lock(JSDOMWindowBase::commonJSGlobalData());
ScriptController* scriptController = frame->script();
ScriptController::ShellMap& windowShells = scriptController->m_windowShells;
ScriptController::ShellMap::iterator windowShellsEnd = windowShells.end();
for (ScriptController::ShellMap::iterator iter = windowShells.begin(); iter != windowShellsEnd; ++iter) {
DOMWrapperWorld* world = iter->first.get();
JSDOMWindowShell* windowShell = iter->second.get();
if (JSDOMWindow* window = m_windows.get(world).get())
windowShell->setWindow(window->globalData(), window);
else {
DOMWindow* domWindow = frame->document()->domWindow();
if (windowShell->window()->impl() == domWindow)
continue;
windowShell->setWindow(domWindow);
if (Page* page = frame->page()) {
scriptController->attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
}
}
示例5: enableEval
void ScriptController::enableEval()
{
JSDOMWindowShell* windowShell = existingWindowShell(mainThreadNormalWorld());
if (!windowShell)
return; // Eval is enabled by default.
windowShell->window()->setEvalEnabled(true);
}
示例6: anyPageIsProcessingUserGesture
bool ScriptController::anyPageIsProcessingUserGesture() const
{
Page* page = m_frame->page();
if (!page)
return false;
const HashSet<Page*>& pages = page->group().pages();
HashSet<Page*>::const_iterator end = pages.end();
for (HashSet<Page*>::const_iterator it = pages.begin(); it != end; ++it) {
for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) {
ScriptController* script = frame->script();
if (script->m_allowPopupsFromPlugin)
return true;
const ShellMap::const_iterator iterEnd = m_windowShells.end();
for (ShellMap::const_iterator iter = m_windowShells.begin(); iter != iterEnd; ++iter) {
JSDOMWindowShell* shell = iter->second.get();
Event* event = shell->window()->currentEvent();
if (event && event->fromUserGesture())
return true;
}
if (isJavaScriptAnchorNavigation())
return true;
}
}
return false;
}
示例7: updateDocument
void ScriptController::updateDocument()
{
Vector<JSC::Strong<JSDOMWindowShell>> windowShells = this->windowShells();
for (size_t i = 0; i < windowShells.size(); ++i) {
JSDOMWindowShell* windowShell = windowShells[i].get();
JSLockHolder lock(windowShell->world().vm());
windowShell->window()->updateDocument();
}
}
示例8: initScript
JSDOMWindowShell* ScriptController::initScript(DOMWrapperWorld* world)
{
ASSERT(!m_windowShells.contains(world));
JSLock lock(SilenceAssertionsOnly);
JSDOMWindowShell* windowShell = createWindowShell(world);
windowShell->window()->updateDocument();
if (Page* page = m_frame->page()) {
attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
m_frame->loader()->dispatchDidClearWindowObjectInWorld(world);
return windowShell;
}
示例9: evaluateInWorld
ScriptValue ScriptController::evaluateInWorld(const ScriptSourceCode& sourceCode, DOMWrapperWorld* world, ShouldAllowXSS shouldAllowXSS)
{
const SourceCode& jsSourceCode = sourceCode.jsSourceCode();
String sourceURL = ustringToString(jsSourceCode.provider()->url());
if (shouldAllowXSS == DoNotAllowXSS && !m_XSSAuditor->canEvaluate(sourceCode.source())) {
// This script is not safe to be evaluated.
return JSValue();
}
// evaluate code. Returns the JS return value or 0
// if there was none, an error occurred or the type couldn't be converted.
// inlineCode is true for <a href="javascript:doSomething()">
// and false for <script>doSomething()</script>. Check if it has the
// expected value in all cases.
// See smart window.open policy for where this is used.
JSDOMWindowShell* shell = windowShell(world);
ExecState* exec = shell->window()->globalExec();
const String* savedSourceURL = m_sourceURL;
m_sourceURL = &sourceURL;
JSLock lock(SilenceAssertionsOnly);
RefPtr<Frame> protect = m_frame;
#if ENABLE(INSPECTOR)
if (InspectorTimelineAgent* timelineAgent = m_frame->page() ? m_frame->page()->inspectorTimelineAgent() : 0)
timelineAgent->willEvaluateScript(sourceURL, sourceCode.startLine());
#endif
exec->globalData().timeoutChecker.start();
Completion comp = JSMainThreadExecState::evaluate(exec, exec->dynamicGlobalObject()->globalScopeChain(), jsSourceCode, shell);
exec->globalData().timeoutChecker.stop();
#if ENABLE(INSPECTOR)
if (InspectorTimelineAgent* timelineAgent = m_frame->page() ? m_frame->page()->inspectorTimelineAgent() : 0)
timelineAgent->didEvaluateScript();
#endif
// Evaluating the JavaScript could cause the frame to be deallocated
// so we start the keep alive timer here.
m_frame->keepAlive();
if (comp.complType() == Normal || comp.complType() == ReturnValue) {
m_sourceURL = savedSourceURL;
return comp.value();
}
if (comp.complType() == Throw || comp.complType() == Interrupted)
reportException(exec, comp.value());
m_sourceURL = savedSourceURL;
return JSValue();
}
示例10: executeIfJavaScriptURL
bool ScriptController::executeIfJavaScriptURL(const KURL& url, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL)
{
if (!protocolIsJavaScript(url))
return false;
if (!m_frame->page()
|| !m_frame->page()->javaScriptURLsAreAllowed()
|| !m_frame->document()->contentSecurityPolicy()->allowJavaScriptURLs()
|| m_frame->inViewSourceMode())
return true;
// We need to hold onto the Frame here because executing script can
// destroy the frame.
RefPtr<Frame> protector(m_frame);
RefPtr<Document> ownerDocument(m_frame->document());
const int javascriptSchemeLength = sizeof("javascript:") - 1;
String decodedURL = decodeURLEscapeSequences(url.string());
ScriptValue result = executeScript(decodedURL.substring(javascriptSchemeLength));
// If executing script caused this frame to be removed from the page, we
// don't want to try to replace its document!
if (!m_frame->page())
return true;
String scriptResult;
#if USE(JSC)
JSDOMWindowShell* shell = windowShell(mainThreadNormalWorld());
JSC::ExecState* exec = shell->window()->globalExec();
if (!result.getString(exec, scriptResult))
return true;
#else
if (!result.getString(scriptResult))
return true;
#endif
// FIXME: We should always replace the document, but doing so
// synchronously can cause crashes:
// http://bugs.webkit.org/show_bug.cgi?id=16782
if (shouldReplaceDocumentIfJavaScriptURL == ReplaceDocumentIfJavaScriptURL) {
// We're still in a frame, so there should be a DocumentLoader.
ASSERT(m_frame->document()->loader());
// DocumentWriter::replaceDocument can cause the DocumentLoader to get deref'ed and possible destroyed,
// so protect it with a RefPtr.
if (RefPtr<DocumentLoader> loader = m_frame->document()->loader())
loader->writer()->replaceDocument(scriptResult, ownerDocument.get());
}
return true;
}
示例11: lock
ScriptCachedFrameData::ScriptCachedFrameData(Frame& frame)
{
JSLockHolder lock(JSDOMWindowBase::commonVM());
ScriptController& scriptController = frame.script();
Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells();
for (size_t i = 0; i < windowShells.size(); ++i) {
JSDOMWindowShell* windowShell = windowShells[i].get();
JSDOMWindow* window = windowShell->window();
m_windows.add(&windowShell->world(), Strong<JSDOMWindow>(window->vm(), window));
window->setConsoleClient(nullptr);
}
scriptController.attachDebugger(nullptr);
}
示例12: executeIfJavaScriptURL
bool ScriptController::executeIfJavaScriptURL(const KURL& url, bool userGesture, bool replaceDocument)
{
if (!protocolIsJavaScript(url))
return false;
if (m_frame->page() && !m_frame->page()->javaScriptURLsAreAllowed())
return true;
if (m_frame->inViewSourceMode())
return true;
#if PLATFORM(APOLLO)
// We should return true even though the script is not going to be executed.
// Otherwise the frame will actually try to navigate to "javascript:"
// which will eventually fail, but will also stop any other in progress requests in this page
// like CSS files, images or JS files
if (!m_frame->loader()->client()->canExecuteScriptURL())
return true;
#endif
const int javascriptSchemeLength = sizeof("javascript:") - 1;
String decodedURL = decodeURLEscapeSequences(url.string());
ScriptValue result;
if (xssAuditor()->canEvaluateJavaScriptURL(decodedURL))
result = executeScript(decodedURL.substring(javascriptSchemeLength), userGesture, AllowXSS);
String scriptResult;
#if USE(JSC)
JSDOMWindowShell* shell = windowShell(mainThreadNormalWorld());
JSC::ExecState* exec = shell->window()->globalExec();
if (!result.getString(exec, scriptResult))
return true;
#else
if (!result.getString(scriptResult))
return true;
#endif
// FIXME: We should always replace the document, but doing so
// synchronously can cause crashes:
// http://bugs.webkit.org/show_bug.cgi?id=16782
if (replaceDocument)
m_frame->loader()->writer()->replaceDocument(scriptResult);
return true;
}
示例13: restore
void ScriptCachedPageData::restore(Page* page)
{
Frame* mainFrame = page->mainFrame();
JSLock lock(false);
ScriptController* scriptController = mainFrame->script();
if (scriptController->haveWindowShell()) {
JSDOMWindowShell* windowShell = scriptController->windowShell();
if (m_window) {
windowShell->setWindow(m_window.get());
} else {
windowShell->setWindow(mainFrame->domWindow());
scriptController->attachDebugger(page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
}
示例14: restore
void ScriptCachedFrameData::restore(Frame* frame)
{
Page* page = frame->page();
JSLock lock(SilenceAssertionsOnly);
ScriptController* scriptController = frame->script();
if (scriptController->haveWindowShell()) {
JSDOMWindowShell* windowShell = scriptController->windowShell();
if (m_window) {
windowShell->setWindow(m_window.get());
} else {
windowShell->setWindow(frame->domWindow());
scriptController->attachDebugger(page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
}
示例15: clearWindowShell
void ScriptController::clearWindowShell(DOMWindow* newDOMWindow, bool goingIntoPageCache)
{
if (m_windowShells.isEmpty())
return;
JSLockHolder lock(JSDOMWindowBase::commonVM());
Vector<JSC::Strong<JSDOMWindowShell>> windowShells = this->windowShells();
for (size_t i = 0; i < windowShells.size(); ++i) {
JSDOMWindowShell* windowShell = windowShells[i].get();
if (&windowShell->window()->wrapped() == newDOMWindow)
continue;
// Clear the debugger and console from the current window before setting the new window.
attachDebugger(windowShell, nullptr);
windowShell->window()->setConsoleClient(nullptr);
// FIXME: We should clear console profiles for each frame as soon as the frame is destroyed.
// Instead of clearing all of them when the main frame is destroyed.
if (m_frame.isMainFrame()) {
if (Page* page = m_frame.page())
page->console().clearProfiles();
}
windowShell->window()->willRemoveFromWindowShell();
windowShell->setWindow(newDOMWindow);
// An m_cacheableBindingRootObject persists between page navigations
// so needs to know about the new JSDOMWindow.
if (m_cacheableBindingRootObject)
m_cacheableBindingRootObject->updateGlobalObject(windowShell->window());
if (Page* page = m_frame.page()) {
attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
windowShell->window()->setConsoleClient(&page->console());
}
}
// It's likely that resetting our windows created a lot of garbage, unless
// it went in a back/forward cache.
if (!goingIntoPageCache)
collectGarbageAfterWindowShellDestruction();
}