summaryrefslogtreecommitdiff
path: root/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/bindings/js/ScriptCachedFrameData.cpp')
-rw-r--r--Source/WebCore/bindings/js/ScriptCachedFrameData.cpp48
1 files changed, 28 insertions, 20 deletions
diff --git a/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp b/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
index c4e12f942..1196db791 100644
--- a/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
+++ b/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp
@@ -1,11 +1,11 @@
/*
* Copyright (c) 2008, Google Inc. All rights reserved.
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
@@ -15,7 +15,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -32,14 +32,17 @@
#include "config.h"
#include "ScriptCachedFrameData.h"
+#include "CommonVM.h"
#include "Document.h"
#include "Frame.h"
#include "GCController.h"
#include "Page.h"
+#include "PageConsoleClient.h"
#include "PageGroup.h"
+#include "ScriptController.h"
#include <heap/StrongInlines.h>
#include <runtime/JSLock.h>
-#include "ScriptController.h"
+#include <runtime/WeakGCMapInlines.h>
using namespace JSC;
@@ -47,18 +50,19 @@ namespace WebCore {
ScriptCachedFrameData::ScriptCachedFrameData(Frame& frame)
{
- JSLockHolder lock(JSDOMWindowBase::commonVM());
+ JSLockHolder lock(commonVM());
ScriptController& scriptController = frame.script();
- ScriptController::ShellMap& windowShells = scriptController.m_windowShells;
+ Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells();
- ScriptController::ShellMap::iterator windowShellsEnd = windowShells.end();
- for (ScriptController::ShellMap::iterator iter = windowShells.begin(); iter != windowShellsEnd; ++iter) {
- JSDOMWindow* window = iter->value->window();
- m_windows.add(iter->key.get(), Strong<JSDOMWindow>(window->vm(), window));
+ 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(0);
+ scriptController.attachDebugger(nullptr);
}
ScriptCachedFrameData::~ScriptCachedFrameData()
@@ -68,29 +72,33 @@ ScriptCachedFrameData::~ScriptCachedFrameData()
void ScriptCachedFrameData::restore(Frame& frame)
{
- JSLockHolder lock(JSDOMWindowBase::commonVM());
+ JSLockHolder lock(commonVM());
+ Page* page = frame.page();
ScriptController& scriptController = frame.script();
- ScriptController::ShellMap& windowShells = scriptController.m_windowShells;
+ Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells();
- for (auto it = windowShells.begin(), end = windowShells.end(); it != end; ++it) {
- DOMWrapperWorld* world = it->key.get();
- JSDOMWindowShell* windowShell = it->value.get();
+ 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)
+ if (&windowShell->window()->wrapped() == domWindow)
continue;
windowShell->setWindow(domWindow);
- if (Page* page = frame.page()) {
+ if (page) {
scriptController.attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
+
+ if (page)
+ windowShell->window()->setConsoleClient(&page->console());
}
}
@@ -99,9 +107,9 @@ void ScriptCachedFrameData::clear()
if (m_windows.isEmpty())
return;
- JSLockHolder lock(JSDOMWindowBase::commonVM());
+ JSLockHolder lock(commonVM());
m_windows.clear();
- gcController().garbageCollectSoon();
+ GCController::singleton().garbageCollectSoon();
}
} // namespace WebCore